【问题标题】:Adding a pandas.dataframe to another one with it's own name使用自己的名称将 pandas.dataframe 添加到另一个
【发布时间】:2020-07-14 14:28:08
【问题描述】:

我想从文件夹中的几个文本文件中检索数据。对于文件夹中的每个文件,我创建一个 pandas.DataFrame 来存储数据。现在它可以正常工作并且所有文件都具有相同的行数。

现在我要做的是将这些数据帧中的每一个添加到包含所有这些数据帧的“主”数据帧中。我想将这些数据帧中的每一个添加到主数据帧及其文件名。
我已经有了文件名。

例如,假设我有 2 个具有自己文件名的数据帧,我想将它们添加到主数据帧中,并为这 2 个数据帧中的每一个表示文件名的标题。

我现在尝试的如下:

# T0 data
t0_path = "C:/Users/AlexandreOuimet/Box Sync/Analyse Opto/Crunch/GF data crunch/T0/*.txt"
t0_folder = glob.glob(t0_path)
t0_data = pd.DataFrame()

for file in t0_folder:
    raw_data = parseGFfile(file)
    file_data = pd.DataFrame(raw_data, columns=['wavelength', 'max', 'min'])    
    file_name = getFileName(file)

    t0_data.insert(loc=len(t0_data.columns), column=file_name, value=file_data)

有人可以帮我解决这个问题吗?
谢谢你:)

编辑: 我想我还不够清楚,这是我期望的输出:
output

【问题讨论】:

  • 您是否想将主 DataFrame 中的数据与一列结合起来以说明它来自哪个框架,或者您是否希望制作一个描述每个数据集的 DataFrame?换句话说,您是在汇总数据还是制作元数据?

标签: python pandas dataframe


【解决方案1】:

您可能正在寻找concat 函数。这是一个例子:

import pandas as pd

A = pd.DataFrame({'Col1': [1, 2, 3], 'Col2': [4, 5, 6]})
B = pd.DataFrame({'Col1': [7, 8, 9], 'Col2': [10, 11, 12]})

a_filename = 'a_filename.txt'
b_filename = 'b_filename.txt'

A['filename'] = a_filename
B['filename'] = b_filename

C = pd.concat((A, B), ignore_index = True)

print(C)

输出:

   Col1  Col2        filename
0     1     4  a_filename.txt
1     2     5  a_filename.txt
2     3     6  a_filename.txt
3     7    10  b_filename.txt
4     8    11  b_filename.txt
5     9    12  b_filename.txt

【讨论】:

    【解决方案2】:

    为了以简单的方式实现这一点,需要在此处进行一些更改。我将在下面列出更改和推理:

    1. 指定您的主 DataFrame 将包含哪些列
    2. 您可以简单地创建一个名为“file_name”的新列,而不是使用您似乎试图定义的某些函数,该列将是用于为该 DataFrame 中的每条记录创建 DataFrame 的文件路径。这样,当您组合 DataFrame 时,每条记录的来源都很清楚。我评论说,如果您想使用字符串方法来清理文件名,您可以对该特定部分进行编辑。
    3. 最后,不要使用插入。要将 DataFrame 与相同的列组合在一起(如果您熟悉 SQL 或集合论,则可以使用联合操作),您可以使用 append 方法。
    # T0 data
    t0_path = "C:/Users/AlexandreOuimet/Box Sync/Analyse Opto/Crunch/GF data crunch/T0/*.txt"
    t0_folder = glob.glob(t0_path)
    t0_data = pd.DataFrame(columns=['wavelength', 'max', 'min','file_name'])
    
    for file in t0_folder:
        raw_data = parseGFfile(file)
        file_data = pd.DataFrame(raw_data, columns=['wavelength', 'max', 'min'])    
        file_data['file_name'] = file #You can make edits here
    
        t0_data  = t0_data.append(file_data,ignore_index=True)
    

    【讨论】:

    • 好的,谢谢,差不多了,实际上我希望我的主人只有文件的名称作为列,并且在每一列中,我想要该文件的数据框。这有意义吗?
    • 可能不清楚,但在我的代码中,t0_data 是我的master,file_data 是包含文件的数据框
    • 所以它本质上是一个有单条记录和多列的DataFrame?
    • 我在帖子中包含了一张图片,以正确地向您展示我想要的东西
    猜你喜欢
    • 2021-03-06
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2021-07-16
    相关资源
    最近更新 更多