将一个df的dtype与另一个具有不同列数的df进行匹配



我有一个数据帧,它有3列,看起来像这样:

name           date             result
Anya          2021-02-13          0
Frank         2021-02-14          1

另一个数据帧如下:

name           date             
Anya          2021-02-13          
Frank         2021-02-14          

我需要将一个df的数据类型与另一个进行匹配。因为我在df_1中有一个额外的列,所以我得到了一个错误。我的代码如下:

df_1.info()
Data columns (total 3 columns):
#   Column         Non-Null Count  Dtype 
---  ------         --------------  ----- 
0   name           717 non-null    object
1   date           717 non-null    object
2   result         717 non-null    int64 
df_2.info()
Data columns (total 3 columns):
#   Column         Non-Null Count  Dtype 
---  ------         --------------  ----- 
0   name           717 non-null    object
1   date           717 non-null    datetime64[ns]
# Match the primary df to secondary df
for x in df_1.columns:
df_2[x] = df_2[x].astype(df_1[x].dtypes.name)

我得到一个错误:KeyError: 'profitable'这里有什么解决方法?我需要df_2的数据类型与df_1完全相同。谢谢

df1->that has 3 columns
df2->other dataframe

首先利用布尔掩码找出两个数据帧中常见的列:

mask=df1.columns.isin(df2.columns)
df=df1[df1.columns[mask]]

现在终于使用astype()方法:

df2=df2.astype(df.dtypes)

或者你可以通过以下方式在一行中完成所有这些:

df2=df2.astype(df1[df1.columns[df1.columns.isin(df2.columns)]].dtypes)

最新更新