Pandas追加数据框,添加字段并填充默认值?

2 投票
2 回答
872 浏览
提问于 2025-04-17 14:45

我有几个数据框,它们的列名都是一样的。我想把这些数据框合并成一个主数据框。同时,我还想创建一个新列,用来标记原来的数据框的名字,然后把这个列填上原数据框的名称。我有一些可以用的代码。

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

不过,这个方法看起来不太优雅。我希望有人能给我推荐一个更好的解决方案。谢谢你们的帮助!

注意:已根据评论进行了编辑!

2 个回答

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())
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

然后把每个添加了新列('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]])

撰写回答