pandas 合并了多个不同大小和列的数据框
pandas merged multiple dataframes of different size and columns
我有很多从 0 到 N 的数据帧需要合并。它们都有一个共同的列,称为 'NAME'。我在合并和连接上尝试了不同的方法,但数据帧没有return我需要的格式
这些是我的一些数据样本
d1 = {'col1': [1,1], 'col2': [1,1], 'NAME': ["A","A"]}
d2 = {'col3': [1,1], 'col4': [1,1], 'NAME': ["A","A"]}
d3 = {'col1': [2,2], 'col2': [2,2], 'NAME': ["B","B"]}
d4 = {'col3': [2,2], 'col4': [2,2], 'NAME': ["B","B"]}
d5 = {'col5': []}
d6 = {'col5': []}
df_list = [d1, d2, d3, d4, d5, d6]
test_df = []
for item in df_list:
temp_df = pd.DataFrame(data=item)
test_df.append(temp_df)
merged = reduce(lambda left, right: pd.merge(left, right, on="NAME", how='outer'),test_df)
上面的代码也报错:KeyError: 'NAME'
我希望我的合并结果是
col1 col2 col3 col4 NAME
0 1 1 1 1 A
1 1 1 1 1 A
0 2 2 2 2 B
1 2 2 2 2 B
d1 = {'col1': [1,1], 'col2': [1,1], 'NAME': ["A","A"]}
d2 = {'col3': [1,1], 'col4': [1,1], 'NAME': ["A","A"]}
d3 = {'col1': [2,2], 'col2': [2,2], 'NAME': ["B","B"]}
d4 = {'col3': [2,2], 'col4': [2,2], 'NAME': ["B","B"]}
d5 = {'col5': []}
d6 = {'col5': []}
df_list = [d1, d2, d3, d4]
test_df = []
for item in df_list:
temp_df = pd.DataFrame(data=item)
test_df.append(temp_df)
merged = reduce(lambda left, right: pd.merge(left, right, on="NAME", how='outer'),test_df)
merged["col5"] = None
col1_x
col2_x
NAME
col3_x
col4_x
col1_y
col2_y
col3_y
col4_y
col5
0
1
1
A
1
1
nan
nan
nan
nan
1
1
1
A
1
1
nan
nan
nan
nan
2
1
1
A
1
1
nan
nan
nan
nan
3
1
1
A
1
1
nan
nan
nan
nan
4
nan
nan
B
nan
nan
2
2
2
2
5
nan
nan
B
nan
nan
2
2
2
2
6
nan
nan
B
nan
nan
2
2
2
2
7
nan
nan
B
nan
nan
2
2
2
2
如果只想扩展一列,那么可以单独添加一列,不合并
KeyError: 'NAME'
假设每个数据帧的 NAME 值都是唯一的,我会在这里使用 pandas.concat
:
(pd
.concat(test_df).rename_axis('index')
.groupby(['NAME', 'index']).first()
.reset_index('NAME')
)
输出:
NAME col1 col2 col3 col4
index
0 A 1.0 1.0 1.0 1.0
1 A 1.0 1.0 1.0 1.0
0 B 2.0 2.0 2.0 2.0
1 B 2.0 2.0 2.0 2.0
我有很多从 0 到 N 的数据帧需要合并。它们都有一个共同的列,称为 'NAME'。我在合并和连接上尝试了不同的方法,但数据帧没有return我需要的格式
这些是我的一些数据样本
d1 = {'col1': [1,1], 'col2': [1,1], 'NAME': ["A","A"]}
d2 = {'col3': [1,1], 'col4': [1,1], 'NAME': ["A","A"]}
d3 = {'col1': [2,2], 'col2': [2,2], 'NAME': ["B","B"]}
d4 = {'col3': [2,2], 'col4': [2,2], 'NAME': ["B","B"]}
d5 = {'col5': []}
d6 = {'col5': []}
df_list = [d1, d2, d3, d4, d5, d6]
test_df = []
for item in df_list:
temp_df = pd.DataFrame(data=item)
test_df.append(temp_df)
merged = reduce(lambda left, right: pd.merge(left, right, on="NAME", how='outer'),test_df)
上面的代码也报错:KeyError: 'NAME'
我希望我的合并结果是
col1 col2 col3 col4 NAME
0 1 1 1 1 A
1 1 1 1 1 A
0 2 2 2 2 B
1 2 2 2 2 B
d1 = {'col1': [1,1], 'col2': [1,1], 'NAME': ["A","A"]}
d2 = {'col3': [1,1], 'col4': [1,1], 'NAME': ["A","A"]}
d3 = {'col1': [2,2], 'col2': [2,2], 'NAME': ["B","B"]}
d4 = {'col3': [2,2], 'col4': [2,2], 'NAME': ["B","B"]}
d5 = {'col5': []}
d6 = {'col5': []}
df_list = [d1, d2, d3, d4]
test_df = []
for item in df_list:
temp_df = pd.DataFrame(data=item)
test_df.append(temp_df)
merged = reduce(lambda left, right: pd.merge(left, right, on="NAME", how='outer'),test_df)
merged["col5"] = None
col1_x | col2_x | NAME | col3_x | col4_x | col1_y | col2_y | col3_y | col4_y | col5 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 1 | A | 1 | 1 | nan | nan | nan | nan | |
1 | 1 | 1 | A | 1 | 1 | nan | nan | nan | nan | |
2 | 1 | 1 | A | 1 | 1 | nan | nan | nan | nan | |
3 | 1 | 1 | A | 1 | 1 | nan | nan | nan | nan | |
4 | nan | nan | B | nan | nan | 2 | 2 | 2 | 2 | |
5 | nan | nan | B | nan | nan | 2 | 2 | 2 | 2 | |
6 | nan | nan | B | nan | nan | 2 | 2 | 2 | 2 | |
7 | nan | nan | B | nan | nan | 2 | 2 | 2 | 2 |
如果只想扩展一列,那么可以单独添加一列,不合并
KeyError: 'NAME'
假设每个数据帧的 NAME 值都是唯一的,我会在这里使用 pandas.concat
:
(pd
.concat(test_df).rename_axis('index')
.groupby(['NAME', 'index']).first()
.reset_index('NAME')
)
输出:
NAME col1 col2 col3 col4
index
0 A 1.0 1.0 1.0 1.0
1 A 1.0 1.0 1.0 1.0
0 B 2.0 2.0 2.0 2.0
1 B 2.0 2.0 2.0 2.0