【发布时间】:2020-09-19 13:08:51
【问题描述】:
【问题讨论】:
标签: python python-3.x dataframe
【问题讨论】:
标签: python python-3.x dataframe
如果您在单行中添加带有错误数据的记录,如果在加载时被解释为正确的数据类型,那么您可以使用 .csv。例如,在需要作为对象的字段中添加通用字符串,否则会加载为整数或浮点数。
【讨论】:
csv 文件没有数据类型定义标题或类似的东西。 因此,当您阅读 csv pandas 时会尝试猜测类型,这可能会更改数据类型。 您有两种可能的解决方案:
例如:
import pandas as pd
date = pd.to_datetime('01-01-2020')
df=pd.DataFrame({'col1':[1,2,3,4],'col2':['a','b','b','d'],'col3':[date,date,date,date]})
print('original \n',df.dtypes)
df.to_csv('testtype.csv',index=False)
df_csv = pd.read_csv('testtype.csv')
print('simple csv read \n',df_csv.dtypes)
df_csv = pd.read_csv('testtype.csv')
print('csv datatypes \n',df_csv.dtypes)
df_csv = pd.read_csv('testtype.csv',parse_dates=[2])
print('csv with parse dates \n',df_csv.dtypes)
df.to_parquet('testtype.pqt')
df_pqt=pd.read_parquet('testtype.pqt')
print('parquet \n',df_pqt.dtypes)
那个输出:
original
col1 int64
col2 object
col3 datetime64[ns]
dtype: object
simple csv read
col1 int64
col2 object
col3 object
dtype: object
csv datatypes
col1 int64
col2 object
col3 object
dtype: object
csv with parse dates
col1 int64
col2 object
col3 datetime64[ns]
dtype: object
parquet
col1 int64
col2 object
col3 datetime64[ns]
dtype: object
【讨论】:
CSV 是文本文件,因此本身不包含像数据类型这样的元数据。
当您打开已保存的 CSV 时,Python/Pandas 正在解释它认为的数据类型 - 与您想要的相比,它可能有点错误(这是正在发生的事情,而不是您的 CSV 被保存错误的数据类型)。
Pandas 'read_csv' 有一个 'dtype' 参数,它将采用列类型的字典。这应该让您指定您想要的数据类型。 I'd suggest reading through the function documentation here.
【讨论】: