当前位置: 首页 > 知识库问答 >
问题:

在for循环中加入数据帧[重复]

穆远
2023-03-14

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

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

这似乎应该很容易做到,但我已经尝试了我能找到的所有功能来实现这一点,但没有任何效果。

以下是基本结构:

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

我尝试了追加、添加、合并、连接、合并,但没有一个有效。我只是使用其中一个不正确吗?

共有2个答案

佟高澹
2023-03-14

考虑在定义的方法中泛化您的过程。然后在列表理解的输出上运行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]
)
锺离德庸
2023-03-14

尝试将所有数据帧附加到列表中,然后使用pd。concat(默认值为轴=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)
 类似资料:
  • 我试图通过循环元素,然后通过分页单击来获得链接列表。我不确定如何在熊猫数据帧中的每个循环经过下面显示的分页后追加,这样我就可以在循环之外调用数据帧来列出所有的链接。 它总是覆盖并打印出最后一行。

  • 我是python的新手,正在学习使用dataframes和列表理解。我有以下数据帧: 现在我想把每个子列表拆分成单词。对于一个列表列表,我可以使用 但是我如何在数据帧上迭代它呢?我想我必须构建一个列表理解,然后使用方法来超越?但我不知道怎么做。我将为单个列表构建列表理解,如下所示:

  • 问题内容: 我有以下for循环: 这样创建的每个数据框都具有与其他列相同的大多数列,但不是全部。而且,它们都只有一行。我需要的是将for循环产生的每个数据帧的所有不同列和每一行添加到数据帧中 我尝试了串联或类似的大熊猫,但似乎没有任何效果。任何想法?谢谢。 问题答案: 假设您的数据如下所示: 然后可以将其替换为 换句话说,不要为每一行形成一个新的DataFrame。相反,请收集字典列表中的所有数据

  • 我有一个两个项目的列表,每个项目是一个文本字符串。我想围绕这两个项目循环,如果一个单词不在一组单词中,则基本上删除它。但是,下面的代码将所有单词放在一起,而不是创建两个单独的项。我希望我的更新列表包含两个项目,每个原始项目对应一个im更新:

  • 问题内容: 我在new.txt中有10行文字,例如Adam:8154 George:5234等等。现在我想要一个仅包含名称的文本文件。xyz.txt必须包含Adam George等。现在上面的代码只给我留下了第十个名字。 如何在一个文本文件中包含所有10个名称。 问题答案: 那是因为您在for循环中打开,写入和关闭文件10次 您应该在循环外打开和关闭文件。 您还应该注意 使用write行 而 不是

  • 我正在实施一个项目,其中MySql数据被导入到hdfs使用sqoop。它有将近30张桌子。我通过推断模式和注册为临时表来读取每个表作为数据帧。我做这件事有几个问题...1.假设df1到df10的表需要实现几个连接。在MySQL中,查询将是而不是使用是否有其他连接所有数据帧有效地基于条件...