【发布时间】:2020-01-17 16:59:04
【问题描述】:
我编写了一些代码,我认为这些代码可以打印文件夹中所有 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
【问题讨论】:
-
内部
merge将基于公共索引合并,而不是基于公共列的 IIRC。因此,您获得大量列是有道理的。 -
你想要
merge而不是join。merge作用于列名,而join作用于索引 -
Pandas 有点矫枉过正。你愿意接受没有 pandas 的解决方案吗?
-
我只想要列名,然后读入所有这些数据毫无价值。抓住标题然后
set.intersection(或Index.intersection)就是你所需要的。 -
抱歉,这不是一个骗局(我认为 OP 坚持使用熊猫),不应该被关闭;同样奇怪的是,
pd.merge(..., how='inner')仍然 采用列的并集(而不是交集);它只删除常见的行而不是列。我修改了我的答案。