Python 填充数据框是否与列名匹配
我有一个df-df1,其中N列用值填充,另一个df2为空,其中M列M>N。 我有两个列表,表示df1的所有列名称和源df2中匹配的列名称,按顺序排列 例如:列表1[0]->列表2[0] 我可以用一个旧的for循环来填充从df1到df2的数据,我希望用一种更具pythonic/pandas/functional的方式来完成同样的操作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
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。