首页 > 解决方案 > 如果索引中存在,熊猫会添加列

问题描述

我有几个 csv 文件,它们在列方面有所不同。

我确切地知道我想看哪一列,但我不确定他们是否所有的文件都有这些列。

在我之前的代码中,我已经进行了这种过滤

keep_col = ['code', '@timestamp', 'message', 'name','ID', 'deviceAction']

知道我实现了一个 for 循环来遍历文件夹中的所有文件(csv)并针对这些文件运行一些脚本。

这是我面临的问题。

由于 csv 结构可能会有所不同,我不能保持keep_col静态,我需要添加一些额外的列,如下所示:

keep_col = ['code', '@timestamp', 'message', 'name','ad.loginName','sourceServiceName','ad.destinationHosts','ID', 'deviceAction']

但不幸的是,我的脚本失败了,因为我添加的新列不在 csv 索引中。很公平,我决定设置一个 ìfstatment

如下:

if 'ad.loginName' and 'sourceServiceName' and 'ad.destinationHosts' in f.index.values:
            keep_col = ['Code', '@timestamp', 'message', 'name','ad.loginName','sourceServiceName','ad.destinationHosts','ID', 'deviceAction']
        else:
            keep_col = ['Code', '@timestamp', 'message', 'name','ID', 'deviceAction']

我尝试了这两种情况ANDOR但两种情况下的输出都是错误的,原因如下:

或:无法运行,因为需要验证至少一个条件,在我的第一个文件中没有任何这些列。

AND:有效,但不报告该列,因为并非所有 3 个条件都为真,因此它不会报告这 3 个字段中的任何一个。

拜托,你们中的任何人都可以帮我解决这个问题。

我希望脚本检查这些列是否存在,写入它们,如果它们不存在于索引中,则忽略它们并继续

非常感谢你们,如果您需要更多信息,请告诉我。

标签: python-3.xpandasdataframe

解决方案


我认为您的意思是检查您提到的所有索引是否都在 f.index.value 中。

if all(col in f.columns
       for col in ['ad.loginName', 'sourceServiceName',
                'ad.destinationHosts']
       ):

或者换句话说,如果该集合是 f.index.values 的子集

if set(['ad.loginName', 'sourceServiceName',
        'ad.destinationHosts']) <= set(f.columns):

或者回到你想要的原始问题

keep_col = ['Code', '@timestamp', 'message', 'name','ad.loginName','sourceServiceName','ad.destinationHosts','ID', 'deviceAction']

keep_col = [col for col in keep_col if col in f.columns]

如果我告诉你'some string' and 'some other string' == True,你能发现你在代码中做错了什么吗?


推荐阅读