首页 > 解决方案 > 将一个df的dtypes与另一个具有不同列数的dtypes匹配

问题描述

我有一个包含 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 的 dtypes 与 df_1 完全相同。谢谢!

标签: pythonpandasdataframematchdtype

解决方案


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)

推荐阅读