无法使用read_csv将列转换为类别dtypes大熊猫

时间:2020-06-15 06:59:09

标签: python 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

时将其转换

1 个答案:

答案 0 :(得分:1)

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

请在文章结尾的“一般准则”上方查看此文章:https://pbpython.com/pandas_dtypes_cat.html

在这种情况下,数据仍然存在,但类型已转换为对象。这是熊猫再次尝试在不引发错误的情况下合并数据但不作假设。如果要转换更改为类别数据类型,您可以使用astype('category')。

此外,您可能希望根据以下信息尝试.reorder_categoriespandas - concat with columns of same categories turns to object

没有示例数据,我无法帮助您进行故障排除。