2

我有几个包含所有相同列名的数据框。我想将它们附加到主数据框中。我还想创建一个表示原始字段的列,然后用原始数据框名称填充它。我有一些有效的代码。

df_combine = df_breakfast.copy()
df_combine['X_ORIG_DF'] = 'Breakfast'
df_combine = df_combine.append(df_lunch, ignore_index=True)
df_combine['X_ORIG_DF'] = df_combine['X_ORIG_DF'].fillna('Lunch')
# Rinse and repeat

然而,它似乎不优雅。我希望有人可以为我指出一个更优雅的解决方案。提前感谢您的宝贵时间!

注意:已编辑以反映评论!

4

2 回答 2

3

我肯定会考虑以可以整齐地访问名称而不是变量名称的方式重组您的数据(如果它们必须分开开始)。
例如字典:

d = {'breakfast': df_breakfast, 'lunch': df_lunch}

创建一个函数,为每个 DataFrame 提供一个新列:

def add_col(df, col_name, col_entry):
    df = df.copy() # so as not to change df_lunch etc.
    df[col_name] = col_entry
    return df

并将每个 DataFrame 列表与附加列 ( 'X_ORIG_DF') 结合起来:

In [3]: df_combine = pd.DataFrame().append(list(add_col(v, 'X_ORIG_DF', k)
                                           for k, v in d.items()))
Out[3]: 
   0  1  X_ORIG_DF
0  1  2      lunch
1  3  4      lunch
0  1  2  breakfast
1  3  4  breakfast

在这个例子中:df_lunch = df_breakfast = pd.DataFrame([[1, 2], [3, 4]]).

于 2013-02-04T21:38:44.233 回答
2

在尝试将多个文件组合在一起以在主数据框中进行分析时,我遇到了与您类似的问题。这是一种通过独立加载每个数据帧来创建主数据帧的方法,在名为“ID”的列中为每个数据帧提供一个标识符并将它们组合起来。如果您的数据是一个名为的目录中的文件列表,datadir我将执行以下操作:

import os
import pandas as pd

data_list = os.listdir(datadir)
df_dict = {}

for data_file in data_list:
    df = read_table(data_file)
    #add an ID column based on the file name.
    #you could use some other naming scheme of course 
    df['ID'] = data_file
    df_dict[data_file] = df

#the concat function is great for combining lots of dfs. 
#it takes a list of dfs as an argument.
combined_df_with_named_column = pd.concat(df_dict.values())
于 2013-02-07T23:59:10.553 回答