python - 无法使用 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 时转换它
解决方案
使用时pd.concat
,您似乎丢失了类别数据类型。
请参阅本文末尾的一般指南上方的这篇文章:https ://pbpython.com/pandas_dtypes_cat.html
"在这种情况下,数据仍然存在,但类型已转换为对象。再一次,这是 pandas 尝试组合数据而不抛出错误但不做假设。如果您现在想转换为类别数据类型,你可以使用 astype('category') 。 "
此外,您可能想.reorder_categories
根据这篇文章尝试:pandas - concat with columns of same categories turn to object
如果没有样本数据,我无法帮助您进行故障排除。
推荐阅读
- java - Spring @Transactional 和 Spring @Lock 注解有什么关系?
- python - 我在字符串格式化期间遇到问题
- typescript - 使用 Typescript - TypeError: graphqlExpress is not a function
- spring-boot - Spring集成java DSL Dispatcher没有订阅者
- css - 在 Chrome 中的 iframe 内下拉额外的空白区域
- c# - 检查变量是否是正确的类型及其 T if 指定的接口
- javascript - 表单提交后如何重定向用户?
- for-loop - 在批处理文件中的for循环之后执行命令?
- javascript - 按顺序打印数字,元素出现的延迟取决于元素的序号
- php - 使用 SSH2 和 phpseclib,如何使用 PHP 将文件上传到 Amazon EC2 服务器?