这是在读取.csv个文件的情况下进行的.我希望有一组"必需"列,pandas将读取和解析,以及一组"可选"列,如果pandas在.csv文件中,它将提取,否则它将不会提取(我在许多不同的.csv文件中循环,只想获得满足这些标准的文件).

假设我有以下数据:

required_col1 required_col2 optional_col1 optional_col2
0 1 4 a d
1 2 5 b e
2 3 6 c f

我希望pandas要求一个数据集有required_col1required_col2个,如果数据集中有optional_col1个,请阅读它,如果没有,请不要提出错误,然后继续;optional_col2应该是一样的.但是,如果所需的列不在数据集中,我希望pandas提出一个错误.

我try 使用lambda函数:

columnsList = ['required_col1', 'required_col2', 'optional_col1', 'optional_col2']
data = pd.read_csv('file.csv', usecols=lambda x: x in columnsList)

但是,这不起作用,因为它将all个列表值视为可选值-因此,如果数据集具有"optional\u col1"和"required\u col2",它仍然会运行而不会引发错误(即使数据中没有"require\u col 1").

我甚至试过:

optionalList = ['optional_col1', 'optional_col2']
columnsList = ['required_col1', 'required_col2', lambda x: x in optionalList]
data = pd.read_csv('file.csv', usecols=columnsList)

但是,我甚至不知道这在Python级别上是否有意义,因为我不确定在运行时是否会访问lambda函数(我try 时没有).

有没有什么方法可以让pandas提取可选列(如果有的话),但也有一组列,它应该从数据集中提取?谢谢你-我感谢所有的帮助!

推荐答案

我仍然不确定这specific question在pandas API领域内是否有答案,但我已经找到了解决问题的方法.我在 comments 中提到,我正在try 在不同的数据集中运行for循环读取,运行该条件usecols.

正如@Michael S.所建议的那样,tryexcept是解决这个问题的方法.

首先,遍历包含required列的数据集,然后将数据集名称附加到列表中.

# list of required columns
requiredList = ['required_col1', 'required_col2']
finalDatasets = []
for i, dataName in enumerate(database)):
    try:
        data = pd.read_csv(dataName, usecols=requiredList)
    except:
        continue
    else:
        finalDatasets.append(dataName)

由于这个新列表已经go 掉了do not have the required columns中的数据集,您现在可以运行lambda函数来解析可选列:

columnsList = ['required_col1', 'required_col2', 'optional_col1', 'optional_col2']
for i, dataName in enumerate(finalDatasets):
    # read in data
    try:
        data = pd.read_csv(dataName, usecols=lambda x: x in columnsList)
    except:
        continue
    else:
        {insert analysis}

This way, you are able to parse through the datasets that have the required columns, but you are unsure if they have optional columns (this is where lambda comes in handy).

Python相关问答推荐

有症状地 destruct 了Python中的regex?

为什么这个带有List输入的简单numba函数这么慢

如何创建一个缓冲区周围的一行与manim?

如何根据一列的值有条件地 Select 前N组?

从嵌套的yaml创建一个嵌套字符串,后面跟着点

下三角形掩码与seaborn clustermap bug

用SymPy在Python中求解指数函数

Discord.py -

如何删除重复的文字翻拍?

获取PANDA GROUP BY转换中的组的名称

Polars时间戳同步延迟计算

在Pandas 中以十六进制显示/打印列?

VSCode Pylance假阳性(?)对ImportError的react

迭代工具组合不会输出大于3的序列

如何在Django查询集中生成带有值列表的带注释的字段?

如何将ManyToManyfield用于Self类

简化通用属性的创建

在被零整除的情况下,Python不遵循IEEE-754吗?

使用loc计算特定行的平均值,loc找不到行值

如何在包含时间戳的词典列表中找到每天的第一个时间?