web-dev-qa-db-fra.com

Convertir les colonnes en chaînes dans Pandas

J'ai le DataFrame suivant d'une requête SQL:

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

et je veux le faire pivoter comme ceci:

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}

mais je veux m'assurer que les 303 colonnes sont converties en chaînes au lieu d'entiers afin que je reçoive ceci:

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

Une façon de convertir en chaîne consiste à utiliser astype :

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

Cependant, vous recherchez peut-être la fonction to_json , qui convertira les clés en json valide (et donc vos clés en chaînes):

_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"}'
_

Remarque: vous pouvez transmettre un tampon/fichier dans lequel enregistrer ceci, avec quelques autres options ...

239
Andy Hayden

Voici l'autre, particulièrement utileconvertit les multiples colonnes en chaîne au lieu d'une seule colonne:

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

Si vous devez convertir TOUTES les colonnes en chaînes, vous pouvez simplement utiliser:

df = df.astype(str)

Ceci est utile si vous avez besoin de tout, sauf de quelques colonnes sous forme de chaînes/objets, puis revenez en arrière et convertissez les autres en tout ce dont vous avez besoin (entier dans ce cas):

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