首页 > 解决方案 > 如何使用正则表达式而不是字符串的 usecols 元素?

问题描述

我使用 pandas 创建了一个脚本来检查所需的数据。我现在收到更多需要查看的文件,遗憾的是这些文件没有相同的标题。

例如,我在列列表中放置了使用“id_num”的列,并且在某些文件中它显示为“num_id”。

是否仍然可以使用我创建的 usecols 列表,并允许其中的某些元素与不同的标题字符串“连接”,例如使用正则表达式?

标签: pythonregexpandas

解决方案


我假设您指的是(或一些类似的熊猫阅读)中的usecols关键字?pd.read_csv我确定您已经收集到 pandas 在读取数据帧之前无法对数据帧进行正则表达式搜索,因此我相当肯定使用usecols关键字进行正则表达式搜索是不可行的。

但是,在将 csv 读入数据框后(df为了示例起见,我们将其命名),您可以使用正则表达式非常轻松地过滤感兴趣的列。

例如,假设您的新数据框已加载到df

potential_columns = ['num_id', 'id_num']

df_cols = [col for col in df.columns if re.search('|'.join(potential_columns), col)]

您可以使用 列出您想要搜索的所有潜在列potential_columns。然后使用join创建一个大规模的正则表达式搜索。然后使用列表推导来聚合df.columns. 完成后,您可以通过调用来完成此过程:

df = df[df_cols]

处理重复的列,创建聪明的关键字来搜索是留给你的练习。


推荐阅读