如何打印所有CSV文件中共有的列名
如何打印所有CSV文件中共有的列名
我拼凑了一些代码,以为会打印出在文件夹中所有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
问题的出现是因为用户想要找出在所有CSV文件中共同出现的列名,并且需要给出解决方法。以下是解决该问题的两种方法:
方法一:使用pandas解决方法
import pandas as pd def get_common_columns(files, **kwargs): """获取指定CSV文件的列名的交集""" 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
方法二:使用原生Python解决方法
import csv def get_common_columns(files): """获取指定CSV文件的列名的交集""" with open(files[0], 'r') as file: reader = csv.reader(file) common_columns = set(next(reader)) for f in files[1:]: with open(f, 'r') as file: reader = csv.reader(file) common_columns &= set(next(reader)) return common_columns
用户最初试图使用pandas解决方法,但是发现即使使用pandas的merge或join函数,也无法得到列名的交集,因此他们转而寻求原生Python的解决方法。他们向其他用户提问如何通过原生Python找到在所有CSV文件中共同出现的列名。用户给出了他们想要的结果和示例数据,并且对之前的混淆向其他用户道歉。
以上是两种解决方法,用户可以根据自己的需求选择其中一种方法来找到在所有CSV文件中共同出现的列名。
问题的出现原因:有多个CSV文件,需要找到这些文件中所有的列名的交集。
解决方法:使用Python编写代码,读取每个CSV文件的列名,并将所有的列名取交集。
在处理CSV文件时,有时我们需要找到多个文件中所有的列名的交集。这种情况下,我们可以使用Python编写代码来实现这个目标。
以下代码段是从Stack Overflow上的一个回答中提取的:
import csv from glob import iglob unique_headers = set() for filename in iglob('*.csv'): with open(filename, 'rb') as fin: csvin = csv.reader(fin) unique_headers.update(next(csvin, [])) print(unique_headers)
这段代码的作用是读取当前目录下所有的CSV文件,并将每个文件的列名添加到一个集合中。最后,打印出集合中的所有元素,即为所有CSV文件中共同的列名。
通过这段代码,我们可以轻松地找到多个CSV文件中的共同列名,并进行后续的处理。
参考链接:How can I read only the header column of a CSV file using Python?