python - 如何打印所有 CSV 文件共有的列名称

标签 python pandas

我编写了一些代码,我认为这些代码可以打印文件夹中所有 CSV 文件共有的所有列名称。我使用的是内部联接,但它的作用类似于外部联接。必须有一个快速解决方案,对吧。

import glob
import pandas as pd

files = glob.glob(r'C:\my_files\*.csv')

def get_merged(files, **kwargs):
    df = pd.read_csv(files[0], **kwargs)
    for f in files[1:]:
        df = df.merge(pd.read_csv(f, **kwargs), how='inner')
    return df

print(get_merged(files))

所以,如果我有 4 个包含这些列的文件:

 cola   colb    colc    cold    cole

我有 1 个包含这些列的文件:

cola    colc    cole

我想看看这个:

cola    colc    cole

最佳答案

您可以使用 pandas 或纯 Python 来计算列名的集合交集。

1) pandas 解决方案

def get_common_columns(files, **kwargs):
    """Get set intersection of column-names of specified CSV files"""
    common_columns = set(pd.read_csv(files[0], nrows=0, **kwargs).columns)
    for f in files[1:]:
        common_columns &= set(pd.read_csv(f, nrows=0, **kwargs).columns)
    return common_columns
  • 我对此进行了测试,它有效
  • pandas 并不过分:只读取列名而不读取数据,只需执行 pd.read_csv(..., nrows=0)然后取set(df.columns)
  • 结果我们不能使用merge/join 。甚至是merge(..., how='inner')采用并集而不是列的交集。仅供引用 merge works on column-names, whereas join works on indices 。但他们按行加入

2) 原生 Python 解决方案 csvset()

  • 同样的想法,只是在原生 Python 中
  • csv 读入列标题,然后使用set()迭代地对列名称进行交集: common_columns |= set(columns_from_current_csv)

关于python - 如何打印所有 CSV 文件共有的列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57963909/

相关文章:

python - Airflow 'NoneType' 对象没有属性 'is_paused',如何解决?

python - 检查列表是否是 Pandas 数据框中另一个列表的子集

python - Pandas 数据帧向前填充衰减

python - 为keras模型添加预处理层并设置张量值

Python Selenium 数组

python - 替换列表元素中的空格

python - 将数据框 reshape 为长格式 python

python - Pandas - 将列名添加到 groupby 的结果中

使用数据框列值的 Python Pandas 绘图

python pandas 错误地读取 excel 日期