【问题标题】:Joining DataFrame in a for loop [duplicate]在 for 循环中加入 DataFrame [重复]
【发布时间】:2023-03-29 01:48:01
【问题描述】:

我正在编写一个脚本,该脚本将文本文件读入可包含各种列和行的 pandas DataFrame。然后,对数据进行一些操作,需要将其全部汇总到一个DataFrame中,输出到一个excel文档中。

我的代码适用于单个文件,但现在我需要遍历所有文件。

这看起来应该很容易做到,但我已经尝试了所有我能找到的 pandas 函数来完成这个,但没有任何效果。

这是基本结构:

import glob
import pandas as pd
# ...
inputFiles = glob.glob('*.rep')

for filename in inputFiles:
    df = pd.read_csv(filename, sep = ' ')
    # DF MODIFICATIONS...
    # Need to send a new df here to avoid overwriting on loop

输入/期望输出示例:

#file1.rep:
columnA columnB columnC
val1 val2 val3
#file2.rep:
columnA columnB columnX
val4 val5 val6

#resulting dataframe:
columnA columnB columnC columnX
val1    val2    val3    NaN
val4    val5    NaN     val6

我尝试了 append、add、combine、join、concat,但都没有奏效。我只是不正确地使用其中之一吗?

【问题讨论】:

标签: python pandas


【解决方案1】:

考虑以定义的方法概括您的流程。然后在列表理解的输出上运行pandas.concat

def process_df(filename):
    df = pd.read_csv(filename, sep = ' ') 

    # DF MODIFICATIONS...

    return df

final_df = pd.concat(
    [process_df(f) for f in inputFiles]
)

【讨论】:

    【解决方案2】:

    尝试将所有数据帧附加到一个列表中,然后使用pd.concat(使用axis=0,这是默认值)将它们组合起来:

    import glob
    import pandas as pd
    # ...
    inputFiles = glob.glob('*.rep')
    
    dfs = []
    for filename in inputFiles:
        df = pd.read_csv(filename, sep = ' ')
        # DF MODIFICATIONS...
        dfs.append(df)
    
    full_df = pd.concat(dfs)
    

    【讨论】:

      猜你喜欢
      • 2019-10-24
      • 2020-01-19
      • 2020-10-18
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多