是否可以使用 pandas 的 read_csv 读取分类列?
Posted
技术标签:
【中文标题】是否可以使用 pandas 的 read_csv 读取分类列?【英文标题】:Is it possible to read categorical columns with pandas' read_csv? 【发布时间】:2015-07-28 03:12:18 【问题描述】:我尝试将dtype
参数与read_csv
作为dtype=n: pandas.Categorical
传递,但这不能正常工作(结果是一个对象)。 The manual is unclear.
【问题讨论】:
一列是分类的还是全部? 一个或多个,但不是全部。 在你的代码 sn-p 中是一个字符串(应该是)。否则,我建议在各个列上使用 astype 方法。 目前这是不可能的(并且传递pd.Categorical
在任何情况下都不起作用,因为这不是 dtype)。但是您可以在github.com/pydata/pandas/issues 提出增强请求
pandas 21.0 有一个CategoricalDtype;示例read_csv(...)
可以满足您的需求。
【参考方案1】:
在0.19.0
版本中,您可以在read_csv
中使用参数dtype='category'
:
data = 'col1,col2,col3\na,b,1\na,b,2\nc,d,3'
df = pd.read_csv(pd.compat.StringIO(data), dtype='category')
print (df)
col1 col2 col3
0 a b 1
1 a b 2
2 c d 3
print (df.dtypes)
col1 category
col2 category
col3 category
dtype: object
如果要为类别指定列,请使用 dtype
和字典:
df = pd.read_csv(pd.compat.StringIO(data), dtype='col1':'category')
print (df)
col1 col2 col3
0 a b 1
1 a b 2
2 c d 3
print (df.dtypes)
col1 category
col2 object
col3 int64
dtype: object
【讨论】:
我认为可以,使用df = pd.read_csv(StringIO(data), dtype='col1':'category', index_col='col1')
这让我很开心。以上是关于是否可以使用 pandas 的 read_csv 读取分类列?的主要内容,如果未能解决你的问题,请参考以下文章
pandas read_csv 中最大化速度的最佳块大小是多少?
Pandas总结第二节 Pandas 的数据读取_pd.read_csv()的使用详解(非常全面,推荐收藏)
pandas read_csv读取大文件的Memory error问题
pandas.read_csv() 可以在同一列中应用不同的日期格式!这是一个已知的错误吗?如何解决?
pandas使用read_csv函数读取文件最后N行数据并保留表头pandas使用read_csv函数读取网络url链接数据