首页 > 解决方案 > 无法使用 read_csv 将列转换为类别 dtypes Pandas

问题描述

我有来自 csv 的数据,并在 Pandas 中使用 read_csv 加载它。我尝试将 6 列转换为 float32 并且它的工作,但类别列未转换..

我检查了我的“div”列,没有问题:

df_concat['div'].unique()

array(['L', 'J', 'K', 'U', 'E', 'B', 'A', 'C', 'N', 'X', 'M', 'O', 'D',
       'I', 'P', 'Q', 'S', 'R', 'T'], dtype=object)

我尝试使用 nrows=4000000 限制数据,并成功转换为类别 dtypes !它出什么问题了?

这是我的代码:

names = ['bdate', 'nama_site', 'kode_store', 'div', 'merdivdesc', 'cat', 'catdesc', 'subcat', 'subcatdesc', 'brand', 'sku', 'sku_desc', 'tillcode', 'netsales', 'profit', 'margin', 'qty']

dtype = {
    'netsales' : 'float32', 'profit' : 'float32', 'margin' : 'float32', 'qty' : 'float32',
    'div' : 'category'
}

data = pd.read_csv('clean_jan20_minified.csv', sep='|', dtype=dtype, chunksize=20000, names=names, skiprows=[0], nrows=4000000)

chunk_list = []  
for chunk in data:  
    chunk_list.append(chunk)

df_concat = pd.concat(chunk_list, ignore_index=True)

当我尝试使用它手动转换时df_concat['div']=df_concat['div'].astype('category')。但我需要在 read_csv 时转换它

标签: pythonpandas

解决方案


使用时pd.concat,您似乎丢失了类别数据类型。

请参阅本文末尾的一般指南上方的这篇文章:https ://pbpython.com/pandas_dtypes_cat.html

"在这种情况下,数据仍然存在,但类型已转换为对象。再一次,这是 pandas 尝试组合数据而不抛出错误但不做假设。如果您现在想转换为类别数据类型,你可以使用 astype('category') 。 "

此外,您可能想.reorder_categories根据这篇文章尝试:pandas - concat with columns of same categories turn to object

如果没有样本数据,我无法帮助您进行故障排除。


推荐阅读