如何在Python中合并单列Pandas DataFrame为多列数据表?
问题
我希望将数据集合并为一个1432行×4列的DataFrame。使用for循环对所有数据进行savgol_filter过滤后,得到了4个各为1432行×1列的输出,想将它们合并为一个数据表,请问该如何操作?
我的代码及输出
代码
for ind,row in gf.iterrows(): filter2 = savgol_filter(row, 31,3) hf = pd.DataFrame(filter2) hf.to_numpy() print(hf)
输出
0 0 0.901141 1 0.915138 2 0.928173 3 0.940281 4 0.951494 ... ... 1427 0.108484 1428 0.111043 1429 0.113958 1430 0.117230 1431 0.120859 [1432 rows x 1 columns] 0 0 0.926357 1 0.940313 2 0.953292 3 0.965326 4 0.976451 ... ... 1427 0.108484 1428 0.111043 1429 0.113958 1430 0.117230 1431 0.120859 [1432 rows x 1 columns] 0 0 0.926577 1 0.941009 2 0.954399 3 0.966784 4 0.978202 ... ... 1427 0.108484 1428 0.111043 1429 0.113958 1430 0.117230 1431 0.120859 [1432 rows x 1 columns] 0 0 0.928050 1 0.942212 2 0.955387 3 0.967608 4 0.978907 ... ... 1427 0.108484 1428 0.111043 1429 0.113958 1430 0.117230 1431 0.120859
解决方案
你可以先初始化一个空列表,每次循环把过滤后的结果添加到列表里,最后用pd.concat把列表里的所有DataFrame按列合并,就能得到1432行×4列的DataFrame了。
修改后的代码如下:
# 初始化空列表存储每个过滤后的结果 filtered_dfs = [] for ind, row in gf.iterrows(): filter2 = savgol_filter(row, 31, 3) hf = pd.DataFrame(filter2, columns=[f'col_{ind}']) # 给每列命名,方便区分 filtered_dfs.append(hf) # 按列合并所有DataFrame final_df = pd.concat(filtered_dfs, axis=1) # 查看结果 print(final_df.shape) # 输出应该是 (1432, 4) print(final_df)
关键说明
- 用列表
filtered_dfs收集每次循环生成的1列DataFrame,避免每次循环覆盖之前的结果 pd.concat的axis=1参数指定按列合并,默认是按行合并(axis=0)- 给每个子DataFrame指定列名(比如
col_0、col_1),合并后列名清晰,也可以换成你需要的自定义名称
如果不需要自定义列名,也可以直接用默认列名,合并后会自动调整:
filtered_dfs = [] for ind, row in gf.iterrows(): filter2 = savgol_filter(row, 31, 3) filtered_dfs.append(pd.DataFrame(filter2)) final_df = pd.concat(filtered_dfs, axis=1)
内容的提问来源于stack exchange,提问作者TCC
相关产品推荐
相关产品推荐

