为什么dataframe在使用字符串dtype时保持读取文件为整数

why does dataframe keep reading file as integer while using dtype of string

我确实使用 python 3.7 来自动化一些流程,包括使用数据框

我遇到的问题如下。

使用此代码:

data=pd.io.parsers.read_csv(basepath + files[0],sep='|',header=None,index_col=None,dtype={'2': 'str'},skiprows=2,usecols=[2,3,10,18,17,1])

文件太大,不可能用 00 跟踪每一个错误,而且不是所有的数字都有 10 个字符长,有些是 9 个字符长,这取决于。

我期望结果如下:

4   12345   abcd   P1234   A1234

但是第 2 列中的某些行在起始数据帧处带有 00 自动认为它是整数并删除它以提高效率 所以有时应该是:

4   00123   abcd   P1234   A1234

但我最终得到了

4   123   abcd   P1234   A1234

所以我检查文档到 pandas 并尝试添加 dtype 它对我不起作用。 有什么建议可以让它发挥作用吗?

您的 header=Nonedtype={'2': 'str'} 组合有问题。当 pandas 解析列 header 时,它将 始终使用字符串 表示。对于像 test.csv 这样的文件,我们得到

1,2.0,2,7
1,2,03,03
1,00,3,01

pd.read_csv('test.csv').columns
#Index(['1', '2.0', '2', '7'], dtype='object')

但是,当指定 header=None 时,pandas 反而会创建一个 Int64Index:

pd.read_csv('test.csv', header=None).columns
#Int64Index([0, 1, 2, 3], dtype='int64')

所以如果你想要 header '2' 的列是一个字符串数据类型,那么你需要删除 header=None,或者如果你只想要第二列(从0) 我们需要在 dtype.

中使用整数 2
pd.read_csv('test.csv', header=None, dtype={2: 'str'})
#   0    1   2  3
#0  1  2.0   2  7
#1  1  2.0  03  3
#2  1  0.0   3  1

pd.read_csv('test.csv', dtype={'2': 'str'})
#   1  2.0   2  7   # <- This row now string column headers
#0  1    2  03  3
#1  1    0   3  1

我通过以下方式绕过了这个问题。

    data=pd.io.parsers.read_csv(basepath + files[0],sep='|',header=None,index_col=None,dtype='str',skiprows=2,usecols=[2,3,10,18,17,1]) # index_col=0,)

    data[10] = pd.to_numeric(data[10])

感谢:(Alex Riley)