python-3.x - 如果索引中存在,熊猫会添加列
问题描述
我有几个 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']
我尝试了这两种情况AND
,OR
但两种情况下的输出都是错误的,原因如下:
或:无法运行,因为需要验证至少一个条件,在我的第一个文件中没有任何这些列。
AND:有效,但不报告该列,因为并非所有 3 个条件都为真,因此它不会报告这 3 个字段中的任何一个。
拜托,你们中的任何人都可以帮我解决这个问题。
我希望脚本检查这些列是否存在,写入它们,如果它们不存在于索引中,则忽略它们并继续
非常感谢你们,如果您需要更多信息,请告诉我。
解决方案
我认为您的意思是检查您提到的所有索引是否都在 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
,你能发现你在代码中做错了什么吗?
推荐阅读
- powershell - 计算结果总和
- docker - 将容器主机名动态解析为 IP
- ruby - 输出 Ruby 索引
- xml - 多个组的 XSL 转换不转换
- jquery - 在 jQuery 中将搜索结果显示为 iframe 灯箱?
- c# - 解析表示具有不同大小字段的“固定长度”消息的 C# 字符串
- amazon-web-services - 如何加密 AWS EMR 节点上的两个 EBS 卷?
- git - git 别名 ssh-add .gitconfig
- amazon-web-services - 使用 Lambda 的 AWS API 的权限问题
- php - 通过 AJAX 进行 SQL 插入和删除查询