Convertir columnas a cadena en pandas

Tengo el siguiente DataFrame de una consulta SQL:

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

Y quiero girarlo así:

 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} 

pero quiero asegurarme de que las 303 columnas se conviertan como cadenas en lugar de enteros para obtener esto:

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

Una forma de convertir a cadena es usar astype :

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

Sin embargo, tal vez esté buscando la función to_json , que convertirá las claves a json válido (y, por lo tanto, a las cadenas):

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

Nota: puede pasar un búfer / archivo para guardarlo, junto con algunas otras opciones …

Aquí está el otro, particularmente útil para convertir las múltiples columnas en cadenas en lugar de solo una sola columna:

 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 

Si necesita convertir TODAS las columnas a cadenas, puede simplemente usar:

 df = df.astype(str) 

Esto es útil si necesita que todo, excepto unas pocas columnas, sean cadenas / objetos, luego vuelva y convierta las otras a lo que necesite (entero en este caso):

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