【问题标题】:Converting dataframe object to date using to_datetime使用 to_datetime 将数据框对象转换为日期
【发布时间】:2019-05-20 23:40:55
【问题描述】:

我有一个如下所示的数据集:

    date        id
0   2014-01-01  11000929
1   2014-01-01  11000190
2   2014-01-01  11000216
3   2014-01-01  11000822
4   2014-01-01  11000971
5   2014-01-01  11000721
6   2014-01-01  11000970
7   2014-01-01  11000574
8   2014-01-01  11000967
9   2014-01-01  11000172
10  2014-01-01  11000208
11  2014-01-01  11000966
12  2014-01-01  11000344
13  2014-01-01  11000965
14  2014-01-01  11000935
15  2014-01-01  11000964
16  2014-01-01  11000741
17  2014-01-01  11000868
18  2014-01-01  11000035
19  2014-01-01  11000203
20  2014-01-02  11000574

如您所见,不同产品有很多重复的日期时间,我将把这个表与另一个表合并,这需要我将日期列(当前和对象)转换为 datetime64[ns]。

我试过了

df_date_id.date = pd.to_datetime(df_date_id.date)

但我最终遇到了错误:

TypeError: <class 'pandas._libs.tslibs.period.Period'> is not convertible to datetime

p.s:我要合并的表如下所示:

    date        id          score
0   2014-01-01  11000035    75
1   2014-01-02  11000035    84
2   2014-01-03  11000035    55

所以两个表的日期格式在我看来是一样的。 提前致谢。

【问题讨论】:

    标签: pandas datetime dataframe merge


    【解决方案1】:

    我认为有必要使用to_timestamp 将时间段转换为日期时间:

    df['date'] = df['date'].dt.to_timestamp()
    print (df['date'].dtypes)
    datetime64[ns]
    

    另一种解决方案是将另一个 DataFrame 中的列转换为句点,例如:

    df2['date'] = df2['date'].dt.to_period('d')
    

    【讨论】:

    • 要合并数据帧,不需要转换为日期时间。如果日期列是str,它仍然可以工作,不是吗?
    • @YOLO - 我认为这里的问题是不同的 dtypes - 日期和时间段,因为同一个是必要的转换。
    • 当我使用 dtypes 检查数据类型时,一个是对象,另一个是 datetime64[ns]。您的替代解决方案对我来说效果更好。谢谢
    • @crinix - 是的,问题是object 应该是字符串、句号,所以检查它的唯一方法是通过print (type(df.loc[0, 'date'])) 检查一个值的类型
    • 一如既往,当我查找某些内容并且 jexrael 给出了正确的答案时!最重要的提示,按照他的建议去做,他是个天才!
    【解决方案2】:

    通过指定格式为我工作:

    df.date = pd.to_datetime(df.date, format='%Y-%M-%d')
    
         date                 id
    0 2014-01-01 00:01:00  11000929
    1 2014-01-01 00:01:00  11000190
    2 2014-01-01 00:01:00  11000216
    3 2014-01-01 00:01:00  11000822
    4 2014-01-01 00:01:00  11000971
    

    如果不尝试:

    df.date = pd.to_datetime(df.date.astype(str), format='%Y-%M-%d')
    

    【讨论】:

    • 指定格式在转换格式方面起作用,但是由于小时信息出现导致其他问题,所以我遵循了 jezrael 的解决方案。感谢您的帮助。
    • 我很好奇为什么这个答案会提供分钟信息。尝试后我意识到 %M 是 Minute 作为一个零填充的十进制数字而不是月份。应该改用%Y-%m-%d
    猜你喜欢
    • 2021-08-06
    • 2017-01-27
    • 2019-11-17
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2022-10-15
    • 2020-07-06
    • 2019-01-24
    相关资源
    最近更新 更多