[英]Pandas read_csv declaration dtype convets column incorrectly
当我使用 pandas 读取 csv 文件时,我使用字典( dict_types
)设置dtype
以保存 memory:
dict_types = {
"Id": "object",
"COD_OPE": "object",
"NUM_OPE": "float32",
"STR_ANA": "category",
"COD_EXO": "category",
"NUM_CPT": "object",
"MTT_DEV": "float32",
"SEN_MTT": "category",
}
columns = [
"Id",
"COD_OPE",
"NUM_OPE",
"STR_ANA",
"COD_EXO",
"NUM_CPT",
"MTT_DEV",
"SEN_MTT",
"DTE_OPE",
"DTE_CPT",
"DTE_VAL",
"DTE_TRT"
]
df_chunk = pd.read_csv(
"../SIDP_Operations/SAB_OPE_02_2020/SAB_OPE_02_2020.rpt",
sep="\t",
dtype=dict_types,
usecols=columns,
error_bad_lines=False,
chunksize=1000000,
parse_dates=["DTE_OPE", "DTE_CPT", "DTE_VAL", "DTE_TRT"],
infer_datetime_format=True,
)
但是,当文件加载并查看df.info()
和df.dtypes
时,它告诉我object
STR_ANA
我希望它应该是category
。 而“COD_EXO”“SEN_MTT”确实是类型category
为什么?
也许是因为我使用块的方式? 实际上我这样做是为了阅读 dataframe
chunk_list=[]
for chunk in df_chunk:
chunk_list.append(chunk)
df=pd.concat(chunk_list,ignore_index=True)
可以使用 pd.concat() 但最好添加ignore_index=True
以避免索引重复。
df = pd.concat(df_chunk, ignore_index=True)
您已为列中不存在的参数parse_dates
填写了 4 columns
。
确保 csv 文件中的列名与您分配的dtypes
和usecols
的名称相同。 可以肯定的是,使用参数header=N
来确保 pandas 使用 csv 的 N 行作为您的 header。
尝试这个:
# add 4 columns with date
columns = [
"Id",
"COD_OPE",
"NUM_OPE",
"STR_ANA",
"COD_EXO",
"NUM_CPT",
"MTT_DEV",
"SEN_MTT",
"DTE_OPE", "DTE_CPT", "DTE_VAL", "DTE_TRT"
]
df_chunk = pd.read_csv(
"../SIDP_Operations/SAB_OPE_02_2020/SAB_OPE_02_2020.rpt",
sep="\t",
header=0,
usecols=columns,
dtype=dict_types,
parse_dates=["DTE_OPE", "DTE_CPT", "DTE_VAL", "DTE_TRT"],
infer_datetime_format=True,
chunksize=1000000,
error_bad_lines=False,
low_memory=False
)
如果它仍然不起作用,请尝试删除low_memory=False
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.