Reputation: 1530
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!
Upvotes: 0
Views: 825
Reputation: 24314
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)
Upvotes: 1