是否可以使用 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()的使用详解(非常全面,推荐收藏)

Python Pandas——Read_csv详解

pandas read_csv读取大文件的Memory error问题

pandas.read_csv() 可以在同一列中应用不同的日期格式!这是一个已知的错误吗?如何解决?

pandas使用read_csv函数读取文件最后N行数据并保留表头pandas使用read_csv函数读取网络url链接数据