0

默认情况下,pandas.read_csv()将使用 dtype 对象读取字符串列。从 pandas 1.0 开始,可以改为将其读取为字符串 dtype。我正在阅读 CSV,其中大多数列都是字符串。我可以告诉熊猫(尝试)默认情况下将所有非数字列作为字符串而不是作为对象 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。在编写 HDFStore 时,直接将所有内容读取为字符串 dtype 应该可以防止混合类型出现问题

4

1 回答 1

3

这在 pandas 1.0 中是不可能的。目前 (2020-01-22) github 上有一个未解决的问题和一个添加此功能的打开的拉取请求。该功能目前针对 pandas 1.1:

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

确切的 API 仍有待确定,我会更新这个答案。

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

于 2020-01-22T10:38:55.130 回答