I have a dataframe that has 3 columns and looks like this:
name date result Anya 2021-02-13 0 Frank 2021-02-14 1
The other dataframe looks like this:
name date Anya 2021-02-13 Frank 2021-02-14
I need to match the data types of one df to another. Because I have one additional column in df_1 I got an error. My code looks like this:
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)
I got an error: KeyError: 'profitable' What would be a workaround here? I need the dtypes of df_2 to be exactly the same as df_1. Thanks!
Advertisement
Answer
df1->that has 3 columns df2->other dataframe
Firstly make use of boolean mask to find out those columns which are common in both dataframes:
mask=df1.columns.isin(df2.columns) df=df1[df1.columns[mask]]
Now finally make use of astype() method:
df2=df2.astype(df.dtypes)
Or you can do all this in 1 line by:
df2=df2.astype(df1[df1.columns[df1.columns.isin(df2.columns)]].dtypes)
