【问题标题】:Automatically infer string columns as strings自动将字符串列推断为字符串
【发布时间】:2020-01-22 09:13:23
【问题描述】:

默认情况下,pandas.read_csv() 将使用 dtype 对象读取字符串列。从 pandas 1.0 开始,可以改为将其读取为字符串 dtype。我正在阅读 CSV,其中大多数列都是字符串。我可以告诉 pandas(尝试)默认将所有非数字列作为字符串而不是对象 dtypes 读取吗?

代码:

import pandas
import io

s = """2,e,4,w
3,f,5,x
4,g,6,z"""
df = pandas.read_csv(io.StringIO(s))
print(df.dtypes)
df = pandas.read_csv(
        io.StringIO(s),
        dtype=dict.fromkeys([1, 3], pandas.StringDtype()))
print(df.dtypes)

这会导致:

2     int64
e    object
4     int64
w    object
dtype: object
2     int64
e    string
4     int64
w    string
dtype: object

我正在使用熊猫 1.0.0rc0。直接将所有内容读取为字符串 dtype 应该可以防止 problems with mixed types when writing an HDFStore

【问题讨论】:

标签: python pandas dataframe io pandas-1.0


【解决方案1】:

这在 pandas 1.0 中是不可能的。目前有 (2020-01-22) an open issue on githubopen pull request adding this feature。该功能目前针对 pandas 1.1:

使用新的 dtypes(IntegerArray、StringArray 等),如果您想在读取数据时使用它们,您必须指定所有列的类型。如果可以选择将所有列的新 dtypes 用作 read_csv()、read_excel() 等的关键字,那就太好了。

具体的API还有待确定,等到时候我会更新这个答案。

现在,您必须明确传递所有应作为字符串读取的列的名称。

【讨论】:

  • 现在可以在 pandas 1.2 中通过在创建 DataFrame 上调用 convert_dtypes 方法来实现它。 Link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
  • 2019-01-19
  • 2019-04-16
相关资源
最近更新 更多