Pandas追加数据框,添加字段并填充默认值?
我有几个数据框,它们的列名都是一样的。我想把这些数据框合并成一个主数据框。同时,我还想创建一个新列,用来标记原来的数据框的名字,然后把这个列填上原数据框的名称。我有一些可以用的代码。
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]])
。