首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫( read_csv )接受不存在的列名

熊猫( read_csv )接受不存在的列名
EN

Stack Overflow用户
提问于 2016-12-12 11:57:20
回答 1查看 4.1K关注 0票数 3

如果在输入文件中找不到usecols中指定的列,是否可以使Pandas.csv()引发错误?例如,在下面的示例中,我希望Pandas引发一个异常,因为输入文件中没有名为"hello“的列:

代码语言:javascript
运行
复制
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)

输出:

代码语言:javascript
运行
复制
col1 col2 col3
one  two  NaN

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-12 12:03:46

您只需读取标题,并使用isin测试是否存在所有预期的列名。

代码语言:javascript
运行
复制
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来测试是否存在所有的cols:

代码语言:javascript
运行
复制
In [11]:
df.columns.isin(cols).all()

Out[11]:
False

此外,您还可以反转掩码以查找丢失的col:

代码语言:javascript
运行
复制
In [18]:
np.array(cols)[~df.columns.isin(cols)]

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

您可以将此逻辑放入用户函数中,以返回任何缺少列名的列表:

代码语言:javascript
运行
复制
def missingCol(cols, path):
    read_cols = pd.read_csv(path, usecols=cols, nrows=0).columns
    return np.array(cols)[~read_cols.isin(cols)].tolist()
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41100373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档