Python 熊猫:数据类型警告,但我指定了数据类型
我正在使用以下命令读取熊猫数据帧:Python 熊猫:数据类型警告,但我指定了数据类型,python,python-3.x,csv,pandas,dataframe,Python,Python 3.x,Csv,Pandas,Dataframe,我正在使用以下命令读取熊猫数据帧: df = pd.read_csv('../table.csv.gz', nrows=10000, index_col=False, engine='c', true_values=[b'1'], false_values=[b'0'], usecols=usecols, dtype=dtype) 我得到以下警告: DtypeWarning:列(5239724
df = pd.read_csv('../table.csv.gz', nrows=10000,
index_col=False, engine='c',
true_values=[b'1'], false_values=[b'0'],
usecols=usecols, dtype=dtype)
我得到以下警告:
DtypeWarning:列(5239724022449)具有混合类型。在导入时指定dtype选项或设置为low_memory=False。
但是列的标题名显示在dtype
中。所有这些列的指定类型都是np.bool
,csv文件中这些列中唯一存在的值是'1'
和'
(逗号之间没有任何值。这将给出一个具有typeobject
的列,并在调用DataFrame.fillna
时变为typebool
)
此外,当我编辑CSV文件以删除除违规列以外的所有列以尝试确定警告的来源时,警告停止发生
发生了什么事?这是
read\u csv
中的错误吗?我应该忽略这个警告吗?< /p> ,所以我猜你的问题是,当你读取文件时,你实际上有两种不同类型的值:NP.BoOL(‘1’)和NP.NaN(‘’’),所以实际上,如果你告诉它考虑列为NPBOOL,它将不会这样做。我认为您可以尝试使用相同的方法,只需将false_values参数更改为false_values=[b']
如果这不起作用,你也可以这样做:
df.loc[:,[5,2397,2402,2449]].fillna('0',inplace = True)
df.to_csv('../table.csv.gz')
现在,当你读回它时,实际上你应该在0的位置上
df = pd.read_csv('../table.csv.gz', nrows=10000,
index_col=False, engine='c',
true_values=[b'1'], false_values=[b'0'],
usecols=usecols, dtype=dtype)
由于文件太大,它可能会读取它并将其分块处理。它试图将列存储为
np.bool
,但缺少的值迫使它将该块存储为对象
。Pandas使用np.nan
表示缺少的值,因此列必须是object
或float
,直到缺少的值被替换为止。警告告诉您,由于分块读取数据帧,数据帧中可能存在混合的d类型。您是否尝试过为这些列的dtype
指定object
或float
?嗯,重新编辑该文件以使其正常工作可能会很好。谢谢,我会的。然而,非常奇怪的是,正是这些列被提出作为警告。我至少还有20个布尔值为空的列。
df = pd.read_csv('../table.csv.gz', nrows=10000,
index_col=False, engine='c',
true_values=[b'1'], false_values=[b'0'],
usecols=usecols, dtype=dtype)