read_csv example python pandas types import-csv

python - example - pandas read_csv



Pandas csv-import: mantener los ceros a la izquierda en una columna (3)

Estoy importando datos de estudio en un marco de datos de Pandas usando read_csv .

Mis códigos de materia son 6 números que codifican, entre otros, el día de nacimiento. Para algunos de mis temas, esto da como resultado un código con un cero inicial (por ejemplo, "010816").

Cuando importo a Pandas, se elimina el cero int64 y la columna se formatea como int64 .

¿Hay alguna manera de importar esta columna sin cambios tal vez como una cadena?

Intenté usar un convertidor personalizado para la columna, pero no funciona, parece que la conversión personalizada se lleva a cabo antes de que Pandas se convierta a int.


Como se indica en esta pregunta / respuesta por Lev Landau , podría haber una solución simple para usar la opción de converters para una determinada columna en la función read_csv .

converters={''column_name'': lambda x: str(x)}

Puede consultar más opciones de la función read_csv en la documentation pandas.io.parsers.read_csv.

Digamos que tengo csv file projects.csv como a continuación:

project_name,project_id Some Project,000245 Another Project,000478

Como por ejemplo, a continuación, el código está recortando ceros a la izquierda:

import csv from pandas import read_csv dataframe = read_csv(''projects.csv'') print dataframe

Resultado:

me@ubuntu:~$ python test_dataframe.py project_name project_id 0 Some Project 245 1 Another Project 478 me@ubuntu:~$

Ejemplo de código de solución:

import csv from pandas import read_csv dataframe = read_csv(''projects.csv'', converters={''project_id'': lambda x: str(x)}) print dataframe

Resultado requerido:

me@ubuntu:~$ python test_dataframe.py project_name project_id 0 Some Project 000245 1 Another Project 000478 me@ubuntu:~$


No creo que pueda especificar un tipo de columna de la manera que desee (si no ha habido cambios reciently y si el número de 6 dígitos no es una fecha que puede convertir a fecha y hora). Puede intentar usar np.genfromtxt() y crear el DataFrame desde allí.

EDITAR: Eche un vistazo al blog Wes Mckinney, puede haber algo para usted. Parece ser que hay un nuevo analizador de pandas 0.10 en noviembre.


aquí hay una solución más corta, robusta y totalmente funcional:

simplemente defina un mapeo (diccionario) entre los nombres de las variables y el tipo de datos deseado:

dtype_dic= {''subject_id'': str, ''subject_number'' : ''float''}

usa ese mapeo con pd.read_csv() :

df = pd.read_csv(yourdata, dtype = dtype_dic)

et voila!