我正在使用以下内容读取 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:列 (5,2397,2402,2449) 具有混合类型。在导入时指定 dtype 选项或设置 low_memory=False。
但是这些列的标题名称出现在 dtype
中。所有这些列的指定类型为 np.bool
,并且 csv 文件中这些列中存在的唯一值是 '1'
和 ''
(逗号之间没有任何内容。这给出了一个类型为 object
的列,并在调用 DataFrame.fillna
时变为类型 bool
)。
此外,当我编辑 CSV 文件以删除除违规列之外的所有列以尝试查明警告来源时,警告停止发生。
这是怎么回事?这是 read_csv
中的错误吗?我应该忽略这个警告吗?
所以我猜你的问题是当你读取文件时,这些列实际上有两种不同类型的值:np.bool('1')和np.nan(''),所以实际上如果你是告诉它将该列视为 np.bool 它不会这样做。我认为您可以尝试使用相同的方法,只需将 false_values 参数更改为 false_values = [b'']
df = pd.read_csv('../table.csv.gz', nrows=10000,
index_col=False, engine='c',
true_values=[b'1'], false_values=[b''],
usecols=usecols, dtype=dtype)
如果这不起作用,您还可以这样做:
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)
我是一名优秀的程序员,十分优秀!