以特定格式将数据帧列的格式从Str更改为Date

时间:2016-07-12 12:50:29

标签: python python-2.7 pandas merge

我有两个数据框,我必须在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

1 个答案:

答案 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