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!