gpt4 book ai didi

python - Pandas read_csv usecols 接受不存在的列名

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:43 30 4
gpt4 key购买 nike

是否可以制作 Pandas 。 read_csv()如果在输入文件中找不到 usecols 中指定的列,则会引发错误?例如。在下面的示例中,我希望 Pandas 引发异常,因为输入文件中没有名为“hello”的列:

import pandas as pd

# Write dummy-data
csv = r"""col1,col2,col3
one,two,three"""
with open("data.csv", "w") as out:
out.write(csv)

# Read dummy-data to DF
df = pd.read_csv("data.csv", usecols=["col1", "col2", "hello"])
print df.to_string(index=False)

输出:

col1 col2 col3
one two NaN

因此 Pandas 读取文件中的第三列名称(“col3”)并用 NaN 填充它,而不是引发“hello”不存在的错误。我希望在读取文件时收到通知,而不是在将文件内容读入内存后验证文件内容。

最佳答案

您可以只读取标题并使用 isin 测试是否存在所有预期的列名:

In [10]:
import io
csv = r"""col1,col2,col3
one,two,three"""
# Read dummy-data to DF
cols=["col1", "col2", "hello"]
df = pd.read_csv(io.StringIO(csv), usecols=cols, nrows=0)
df.columns.isin(cols)

Out[10]:
array([ True, True, False], dtype=bool)

您可以使用 all 来测试是否所有列都存在:

In [11]:
df.columns.isin(cols).all()

Out[11]:
False

此外,您可以反转掩码以找到丢失的列:

In [18]:
np.array(cols)[~df.columns.isin(cols)]

Out[18]:
array(['hello'],
dtype='<U5')

您可以将此逻辑放在用户函数中,以返回所有缺失列名的列表:

def missingCol(cols, path):
read_cols = pd.read_csv(path, usecols=cols, nrows=0).columns
return np.array(cols)[~read_cols.isin(cols)].tolist()

关于python - Pandas read_csv usecols 接受不存在的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41100373/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com