将一个 df 的数据类型与具有不同列数的另一个 df 匹配

match dtypes of one df to another with different number of columns

我有一个包含 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)

或者您可以通过以下方式在 1 行中完成所有这些操作:

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