it-swarm.com.de

Konvertieren Sie Spalten in Zeichenfolge in Pandas

Ich habe den folgenden DataFrame aus einer SQL-Abfrage:

(Pdb) pp total_rows
     ColumnID  RespondentCount
0          -1                2
1  3030096843                1
2  3030096845                1

und ich möchte es so drehen:

total_data = total_rows.pivot_table(cols=['ColumnID'])

(Pdb) pp total_data
ColumnID         -1            3030096843   3030096845
RespondentCount            2            1            1

[1 rows x 3 columns]


total_rows.pivot_table(cols=['ColumnID']).to_dict('records')[0]

{3030096843: 1, 3030096845: 1, -1: 2}

aber ich möchte sicherstellen, dass die 303 Spalten als Zeichenfolgen anstatt als Ganzzahlen umgewandelt werden, damit ich Folgendes erhalte:

{'3030096843': 1, '3030096845': 1, -1: 2}
117
sontek

Eine Möglichkeit zum Konvertieren in einen String ist die Verwendung von astype :

total_rows['ColumnID'] = total_rows['ColumnID'].astype(str)

Vielleicht suchen Sie jedoch nach to_json Funktion, die Schlüssel in gültigen json konvertiert (und damit Ihre Schlüssel in Strings):

In [11]: df = pd.DataFrame([['A', 2], ['A', 4], ['B', 6]])

In [12]: df.to_json()
Out[12]: '{"0":{"0":"A","1":"A","2":"B"},"1":{"0":2,"1":4,"2":6}}'

In [13]: df[0].to_json()
Out[13]: '{"0":"A","1":"A","2":"B"}'

Hinweis: Sie können einen Puffer/eine Datei übergeben, um diese zusammen mit einigen anderen Optionen zu speichern ...

239
Andy Hayden

Hier ist die andere, besonders nützlich fürKonvertieren der mehreren Spalten in einen String anstelle von nur einer einzelnen Spalte:

In [76]: import numpy as np
In [77]: import pandas as pd
In [78]: df = pd.DataFrame({
    ...:     'A': [20, 30.0, np.nan],
    ...:     'B': ["a45a", "a3", "b1"],
    ...:     'C': [10, 5, np.nan]})
    ...: 

In [79]: df.dtypes ## Current datatype
Out[79]: 
A    float64
B     object
C    float64
dtype: object

## Multiple columns string conversion
In [80]: df[["A", "C"]] = df[["A", "C"]].astype(str) 

In [81]: df.dtypes ## Updated datatype after string conversion
Out[81]: 
A    object
B    object
C    object
dtype: object
22
Surya

Wenn Sie ALLE Spalten in Zeichenfolgen konvertieren müssen, können Sie einfach Folgendes verwenden:

df = df.astype(str)

Dies ist nützlich, wenn Sie alles außer ein paar Spalten benötigen, um Zeichenfolgen/Objekte zu sein. Gehen Sie dann zurück und konvertieren Sie die anderen in die gewünschten Werte (in diesem Fall ganze Zahlen):

 df[["D", "E"]] = df[["D", "E"]].astype(int) 
17
Mike