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