如何应用此 pandas.Series 代码来比较文件夹中的多个文件

Posted

技术标签:

【中文标题】如何应用此 pandas.Series 代码来比较文件夹中的多个文件【英文标题】:How to apply this pandas.Series code to compare several files within a folder 【发布时间】:2018-01-23 00:06:57 【问题描述】:

我已经有了这段代码,它可以在一个文件夹中找到所有 csv 文件并将它们读入:

directory = os.fsencode(folderpath)
os.chdir(directory)
for file in os.listdir(directory):
    filename = os.fsdecode(file)
    if filename.endswith(".csv"):
        df1 = pd.read_csv(filename)[columnName]

现在我的代码可以找到在我输入的每个 csv 文件中找到的所有行:

    match = pd.Series(list(set(file1.columnName) & set(file2.columnName) & set(file3.columnName) & set(file4.columnName)))

如何合并上述两段代码以查找文件夹内每个 csv 文件中的所有行并在单个 pandas 数据框中返回匹配项?

【问题讨论】:

如果您可以展示此类数据框的示例您期望的结果是什么样的,那将会很有用。这听起来很像我认为你在上一个问题中的意思。鉴于您选择接受的答案,我显然错了我认为您上次的意思。通过使用一个显而易见的示例,您可以非常清楚地了解您在寻找什么。 【参考方案1】:

我认为您可以先创建所有Series 的列表,然后通过reduce 动态查找匹配项:

#data from previous answer
vals = []
directory = os.fsencode(folderpath)
os.chdir(directory)
for file in os.listdir(directory):
    filename = os.fsdecode(file)
    if filename.endswith(".csv"):
        df1 = pd.read_csv(filename)['Name']
        vals.append(df1)

from functools import reduce
a = reduce(lambda x, y: set(x) & set(y), vals)
print (a)
'Ben', 'Neil'

df = pd.DataFrame('col':list(a))
print (df)
    col
0   Ben
1  Neil

【讨论】:

以上是关于如何应用此 pandas.Series 代码来比较文件夹中的多个文件的主要内容,如果未能解决你的问题,请参考以下文章

如何从pandas Series类继承以简化Series类型的子集?

如何在用户定义的函数(又名 udf)中返回 Pandas.Series?

将项目添加到 pandas.Series?

pandas数组(pandas Series)-向量化运算

检查 pandas.Series.index 是不是包含值

pandas.Series() 使用 DataFrame Columns 创建返回 NaN 数据条目