Python 填充数据框是否与列名匹配

Python 填充数据框是否与列名匹配,python,pandas,dataframe,rename,Python,Pandas,Dataframe,Rename,我有一个df-df1,其中N列用值填充,另一个df2为空,其中M列M>N。 我有两个列表,表示df1的所有列名称和源df2中匹配的列名称,按顺序排列 例如:列表1[0]->列表2[0] 我可以用一个旧的for循环来填充从df1到df2的数据,我希望用一种更具pythonic/pandas/functional的方式来完成同样的操作 df1 A B C D 0 94 18 47 1 1 75 40 30 97 2 14 56 63 89 3 2

我有一个df-df1,其中N列用值填充,另一个df2为空,其中M列M>N。 我有两个列表,表示df1的所有列名称和源df2中匹配的列名称,按顺序排列

例如:列表1[0]->列表2[0]

我可以用一个旧的for循环来填充从df1到df2的数据,我希望用一种更具pythonic/pandas/functional的方式来完成同样的操作

df1
    A   B   C   D
0   94  18  47  1
1   75  40  30  97
2   14  56  63  89
3   28  74  25  59
预期产出:

df2
    Z1  Z2  Z3  Z4  Z5  Z6  Z7  Z8
0   94      18  47               1
1   75      40  30              97
2   14      56  63              89
3   28      74  25              59
试试这个:

import pandas as pd

# your code

df2 = df1.copy()
df2.columns = ["Z1", "Z3", "Z4", "Z8"]
df2["Z2"] = pd.np.NaN
df2["Z5"] = pd.np.NaN
df2["Z6"] = pd.np.NaN
df2["Z7"] = pd.np.NaN
试试这个:

import pandas as pd

# your code

df2 = df1.copy()
df2.columns = ["Z1", "Z3", "Z4", "Z8"]
df2["Z2"] = pd.np.NaN
df2["Z5"] = pd.np.NaN
df2["Z6"] = pd.np.NaN
df2["Z7"] = pd.np.NaN
Idea是通过列zip创建的dict重命名列名称,然后使用第二个数据帧的列名称:

df = df1.rename(columns=dict(zip(list1, list2))).reindex(df2.columns, axis=1)
print (df)
   Z1  Z2  Z3  Z4  Z5  Z6  Z7  Z8
0  94 NaN  18  47 NaN NaN NaN   1
1  75 NaN  40  30 NaN NaN NaN  97
2  14 NaN  56  63 NaN NaN NaN  89
3  28 NaN  74  25 NaN NaN NaN  59
详情:

Idea是通过列zip创建的dict重命名列名称,然后使用第二个数据帧的列名称:

df = df1.rename(columns=dict(zip(list1, list2))).reindex(df2.columns, axis=1)
print (df)
   Z1  Z2  Z3  Z4  Z5  Z6  Z7  Z8
0  94 NaN  18  47 NaN NaN NaN   1
1  75 NaN  40  30 NaN NaN NaN  97
2  14 NaN  56  63 NaN NaN NaN  89
3  28 NaN  74  25 NaN NaN NaN  59
详情:


令人惊叹的我忘了args列可以像dict一样使用iterable。太棒了!我忘了args列可以像dict一样接受iterable。