Pandas 熊猫在默认情况下使用Int64(大写),而不是默认的Int64(小写)

Pandas 熊猫在默认情况下使用Int64(大写),而不是默认的Int64(小写),pandas,Pandas,我有熊猫v0.24+,我正在浏览: 通过尝试读取带有nan值的整数列,我得到了常见的值错误 Pandas:ValueError:Integer列在第33列中有NA值 这是因为整数类型无法处理NA值。问题是我实际上不知道我的csv的数据类型——我仍然希望熊猫“推断”它们是什么。在默认情况下使用Int64而不是Int64时,是否有一种方法可以做到这一点,这样它就不会停止并抱怨过程中的NA值 编辑:这就是发生的情况 df = pd.read_csv(file) 然后 回溯(最近一次呼叫最后一次):

我有熊猫v0.24+,我正在浏览:

通过尝试读取带有nan值的整数列,我得到了常见的值错误

Pandas:ValueError:Integer列在第33列中有NA值

这是因为整数类型无法处理NA值。问题是我实际上不知道我的csv的数据类型——我仍然希望熊猫“推断”它们是什么。在默认情况下使用
Int64
而不是
Int64
时,是否有一种方法可以做到这一点,这样它就不会停止并抱怨过程中的NA值

编辑:这就是发生的情况

df = pd.read_csv(file)
然后

回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/_pydev_bundle/pydev_umd.py”,第197行,在runfile中
pydev_imports.execfile(文件名、全局变量、本地变量)#执行脚本
文件“/Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/_pydev_imps/_pydev_execfile.py”,execfile中第18行
exec(编译(内容+“\n”,文件,'exec'),全局,loc)
文件“/Users/christorturnbull/DATA\u SCIENCE/PointTopic/access\u test\u v3.py”,第18行,在
df=mdb.read_表(rdb_文件,'v31a_v8_oct20_point_topic_availability_deliverable_201118')
文件“/Users/christorturnbull/DATA\u SCIENCE/virtualenvs/pointtopic/lib/python3.8/site packages/pandas\u access/\uuuuuuuuu init\uuuuuuuu.py”,第127行,在read\u表中
返回pd.read\u csv(proc.stdout,*args,**kwargs)
文件“/Users/christorturnbull/DATA\u SCIENCE/virtualenvs/pointtopic/lib/python3.8/site packages/pandas/io/parsers.py”,第688行,以只读csv格式
返回读取(文件路径或缓冲区,kwds)
文件“/Users/christorturnbull/DATA\u SCIENCE/virtualenvs/pointtopic/lib/python3.8/site packages/pandas/io/parsers.py”,第460行,已读
data=parser.read(nrows)
文件“/Users/christorturnbull/DATA_SCIENCE/virtualenvs/pointtopic/lib/python3.8/site packages/pandas/io/parsers.py”,第1198行,已读
ret=自身。\发动机读取(nrows)
文件“/Users/christorturnbull/DATA_SCIENCE/virtualenvs/pointtopic/lib/python3.8/site packages/pandas/io/parsers.py”,第2157行,已读
数据=自身。\读卡器读取(nrows)
文件“pandas/_libs/parsers.pyx”,第847行,在pandas._libs.parsers.TextReader.read中
文件“pandas/_libs/parsers.pyx”,第862行,在pandas._libs.parsers.TextReader._read_low_内存中
文件“pandas/_libs/parsers.pyx”,第941行,在pandas._libs.parsers.TextReader._read_行中
文件“pandas/_libs/parsers.pyx”,第1073行,在pandas._libs.parsers.TextReader._convert_column_data中
文件“pandas/_libs/parsers.pyx”,第1104行,在pandas._libs.parsers.TextReader._convert_令牌中
文件“pandas/_libs/parsers.pyx”,第1198行,在pandas._libs.parsers.TextReader._convert_with_dtype中
ValueError:整数列在第33列中有NA值

但是,
df=pd.read\u csv(file,header=None)
似乎可以工作,尽管现在我没有数据类型

据我所知,在读取csv时需要指定数据类型,同样在0.24的可为空整数(在中删除)中,您可以找到以下内容:

熊猫可以使用 数组。整数数组。这是在中实现的扩展类型 熊猫。它不是整数的默认数据类型,并且将不会 推断;必须将数据类型显式传递到array()或Series中

作为替代方案,您可以使用:

输出

val    string
col     Int64
dtype: object
              0    1    2
0           val  col  bad
1         hello    1  1.5
2         world  NaN  2.3
转换类型的文档说明:

convert\u integer:bool,默认为True,如果可能,是否进行转换 可以对整数扩展类型执行此操作

请注意,在上面的示例中,原始数据类型是float:

print(df.dtypes)
输出(用于使用read\u csv产生的df)

更新

似乎有什么东西会使推理机崩溃,但由于问题位于第33列,您可以为其指定数据类型,请尝试:

df = pd.read_csv(file, dtype={33: pd.Int64Dtype()})
使用

df = pd.read_csv(file, header=None)
works,使标题成为列值的一部分,因此当它们是字符串时,列将被解释为dtype对象,如中所示:

import pandas as pd
import io

s = """val,col,bad\n
       hello,1,1.5\n
       world,,2.3"""

df = pd.read_csv(io.StringIO(s), header=None)
print(df)
输出

val    string
col     Int64
dtype: object
              0    1    2
0           val  col  bad
1         hello    1  1.5
2         world  NaN  2.3

可以看到,标题是第一行的值。

您可以添加输入和正在使用的代码吗?所以我的问题是,为什么在读取csv时会抛出此错误?我相信熊猫默认情况下会将带有nan的列解释为float。。。所以我猜你是在事后转换列,那么你要转换哪些列?“这样它就不会停止并抱怨过程中的NA值”是不清楚的,你需要发布一个可复制的数据片段。这是发生在
pd.read\u csv()
上,还是发生在哪个命令上?发布你的代码和你得到的错误。
              0    1    2
0           val  col  bad
1         hello    1  1.5
2         world  NaN  2.3