为什么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=None
和 dtype={'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)
我确实使用 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=None
和 dtype={'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)