【发布时间】:2020-10-02 19:48:19
【问题描述】:
假设这些数据帧:
import pandas as pd
df_one = pd.DataFrame({'col_1':[1, 2, 3, 4], 'col_2':[5,6,7,8], 'col_3':[9,10,11,12]})
df_two = pd.DataFrame({'col_1':[1, 2, 3, 4], 'col_3': [9,10,11,12], '2_col':[5, 6, 7, 8]})
实际上,这些数据框来自不同的 txt 文件,因此每列的概念是相同的,但列的顺序不同,并且某些列的名称略有不同。两个数据集都有 33 列代表相同的概念,但顺序不同。
如何以与第一个 df 相同的结构重新排序第二个 df?表示与 df_one 相同的列顺序和相同的列名...
最终目标是将两个 df 合并为一个合并的。
我试过这个:
cols = df_one.columns.to_list() # get columns names from df_one
df_two = df_two.reindex(columns=cols)
但这会在 'col_2' 中获得 NaN 值:
col_1 col_2 col_3
0 1 NaN 9
1 2 NaN 10
2 3 NaN 11
3 4 NaN 12
我也尝试先更改 df_two 中的 col 名称,然后重新排序:
df_two.columns = cols
df_two = df_two.reindex(columns=cols)
但这也是错误的(col_2 现在具有 col_3 的值):
col_1 col_2 col_3
0 1 9 5
1 2 10 6
2 3 11 7
3 4 12 8
感谢您的建议。
根据评论进行编辑:
实际的列名更像是:“Date”和“iDate”、“Contract”和“nContract”、“Premium”和“iPremium”。我以问题中的数字为例(可能是个坏主意),但相关数字不是名称的一部分。
如何映射 df_two 中的列顺序? (例如,df_1 的 col 1 与 df_2 中的 col 1 相同,df_1 的 col 2 是 df_2 的 col_3,df_1 的 col_3 是 df_2 的 col_2) - 然后我将 df_2 中的列重命名为 df_1 中的列。
【问题讨论】:
-
首先重命名列,使
df_one和df_two具有相同的列名(使用df_one.rename(columns={'col_one':'col_two', ...}))。然后df_one[df_two.columns]将完成这项工作。 -
列之间的共同点是什么,都是编号的吗?
-
所以,我最终按照@pythonic833 的建议手动重命名列(实际上将名称赋予 read_csv 函数中的 'name' 参数,然后将两个 dfs 与
pd.concat连接起来。