【问题标题】:Appending DataFrames in Loop在循环中附加 DataFrame
【发布时间】:2020-06-10 16:46:00
【问题描述】:

目标:在循环中附加 DataFrames 以获得组合数据帧。

df_base = pd.DataFrame(columns=df_col.columns)
file_path = 'DATA/'
filenames = ['savedrecs-23.txt', 'savedrecs-25.txt', 'savedrecs-24.txt']

For循环:

for file in filenames:
    path = file_path+file
    doc = codecs.open(path,'rU','UTF-8')

    df_add = pd.read_csv(doc, sep='\t')
    res = df_base.append(df_add)

res.shape

预期结果: (15, 67) ;三个数据框合并为一个数据框

目前的结果: (5, 67) ;只返回循环中的最后一个数据帧。

【问题讨论】:

  • hmm 使用 pd.concat 否则将 res 替换为 df_base
  • 这段代码中的df_base 是什么?它看起来不像是定义的。也许你想要df_base = df_base.append(df_add)

标签: python pandas dataframe for-loop append


【解决方案1】:

res = df_base.append(df_add)

Pandas append 函数不会修改它被调用的对象。它返回一个新对象,其中包含来自添加的数据帧的行,这些行附加到原始数据帧的行上。

由于您从未修改过df_base,因此您的输出只是最后一个文件的帧,附加到空的df_base 数据帧。

请注意,pandas documentation 不建议将数据帧迭代地附加在一起。相反,“更好的解决方案是将这些行附加到一个列表中,然后一次将列表与原始 DataFrame 连接起来。” (举个例子)

【讨论】:

  • 谢谢!但考虑到这一点,以下代码应该可以工作:df_base = df_base.append(df_add)
  • @thetinywindow,是的,它应该可以工作,但如果您需要处理更大的数据集,可能会效率低下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 2020-01-28
  • 2021-10-31
  • 2019-04-13
  • 2021-05-19
相关资源
最近更新 更多