我有两个数据框,我必须在Date上合并。 但数据类型不一样。它们是日期和格式。
print(visit_data.iloc[0]['visit_date'])
2016-05-22
type(visit_data.iloc[0]['visit_date'])
Out[40]: datetime.date
print(holiday_data.iloc[0]['visit_date'])
1/1/2016
type(holiday_data.iloc[0]['visit_date'])
Out[46]: str
所以这是类型和格式。现在我用它来合并。
data_store = pd.merge(data_store, holiday_data, how = 'left' , on = ['visit_date','State']).reset_index(drop=True)
合并正在发生,因为有2个键,但数据不在输出中,这可能是由于visit_date的格式不同。 所以,我试图通过这个来改变它。
holiday_data['visit_date'] = pd.to_datetime(holiday_data['visit_date'], format = 'format="%m/%d/%Y')
但这给出了
print(holiday_data.iloc[0]['visit_date'])
2016-01-01 00:00:00
type(holiday_data.iloc[0]['visit_date'])
Out[54]: pandas.tslib.Timestamp
这不是我想要的。
我正在更改holiday_data
的数据类型,因为data_store
的长度非常长。有什么帮助来解决这个问题?我正在使用python2.7
答案 0 :(得分:0)
如果您希望它作为datetime
对象返回,您可以这样做:
import datetime
holiday_data['visit_date'] = holiday_data['visit_date'].apply(lambda x:
datetime.datetime.strptime(x,'%m/%d/%Y'))
编辑:
要从datetime对象中仅检索日期,请使用dt accessor
。
工作示例:
In [2]: df = pd.DataFrame(['1/1/2016', '1/2/2016', '1/3/2016', '1/4/2016', '1/5/2016'], columns=['Mycol'])
In [3]: df['Mycol'] = df['Mycol'].apply(lambda x: datetime.datetime.strptime(x,'%m/%d/%Y')).dt.date
In [4]: df
Out[4]:
Mycol
0 2016-01-01
1 2016-01-02
2 2016-01-03
3 2016-01-04
4 2016-01-05
In [5]: df.iloc[0]['Mycol']
Out[5]: datetime.date(2016, 1, 1)
In [6]: type(df.iloc[0]['Mycol'])
Out[6]: datetime.date