【问题标题】:Is it possible to read categorical columns with pandas' read_csv?是否可以使用 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(...) 可以满足您的需求。

标签: file csv pandas readfile categorical-data


【解决方案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')
  • 这让我很开心。
猜你喜欢
  • 2012-05-29
  • 2017-01-27
  • 2020-05-25
  • 1970-01-01
  • 2018-11-15
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 2020-04-03
相关资源
最近更新 更多