I want to merge two dataframes on one column which is date.
But, the problem is that in one dataframe the date column type is string, and in another one, the type of the date is datetime.date.
The date in df1 is an integer, then I have use the following code to change it to YYYY-DD-MM
df1['date'] = df1['date'].apply(datetime.fromtimestamp) #change to YYYY-DD-MM HH-MM-SS
df1['date'] = pd.to_datetime(df['date']).dt.date #change to datetime.date
df1['date'] = df1['date'].strftime('%Y-%d-%m') #change to string which does not work
Then, when I want to merge, the results for me is an empty dataframe. Here is a simple example. **[![Here the two dates are string. I could not assign the datetime.date to a date in this example.
import pandas as pd
import numpy as np
df1 = pd.DataFrame()
df2 = pd.DataFrame()
df1['a'] = [ '2012-01-02', '2013-03-02' ]
df1['b'] = [ 2, 9]
df2['a'] = [ '2012-02-05', '2013-03-02' ]
df2['b'] = [ 4, 7]
Here is the dataframe which I want.
CodePudding user response:
You could directly convert your date column to string: df1['a'] = df1['a'].astype(str)
From what I tested it gives the same format but you don't control it.
To control it you can apply the transformation: df1['a'] = df1['a'].apply(lambda x: x.strftime('%Y-%d-%m'))
Or you could change the other df to a date if it is a string in the format YYYY-MM- DD as you have in your small example: df2['a'] = df2['a'].apply(datetime.fromisoformat)

