【问题标题】:How to convert "dd.mm.yyyy" into "yyyy-mm-dd" with Pandas in Python?如何在 Python 中使用 Pandas 将“dd.mm.yyyy”转换为“yyyy-mm-dd”?
【发布时间】:2016-11-28 10:20:41
【问题描述】:

我正在将包含盘中股市数据的 CSV 文件读入 Pandas 数据框。

import pandas as pd

df = pd.read_csf('file.csv')
df.columns = ['Day', 'Time', 'Open', 'High', 'Low', 'Volume']
df.head()

    Day         Time    Open    High    Low     Close   Volume
0   23.11.2009  17:15   1104.00 1104.00 1104.00 1104.00 2
1   23.11.2009  17:20   1103.00 1103.00 1103.00 1103.00 11
2   23.11.2009  17:25   1103.75 1103.75 1103.75 1103.75 1
3   23.11.2009  17:30   1103.25 1103.25 1102.50 1102.50 3
4   23.11.2009  17:35   1103.25 1103.50 1103.00 1103.00 13

很遗憾,“日”列中的日期格式是欧洲日期格式:“dd.mm.yyyy”。例如“28.11.2016”。

如何轻松地将“Day”列转换为“yyyy-mm-dd”或“2016-11-28”之类的内容?

【问题讨论】:

    标签: python date pandas


    【解决方案1】:

    to_datetime 只适用于您的日期字符串:

    In [3]:
    pd.to_datetime(df['Day'])
    
    Out[3]:
    0   2009-11-23
    1   2009-11-23
    2   2009-11-23
    3   2009-11-23
    4   2009-11-23
    Name: Day, dtype: datetime64[ns]
    

    这会返回一个datetime64 列

    请注意,如果您将parse_dates=['Day'] 传递给read_csv,那么它会在读取您的 csv 时进行转换:

    In [6]:
    df = pd.read_csv(io.StringIO(t), parse_dates=['Day'], index_col=0)
    df
    
    Out[6]:
             Day   Time     Open     High      Low    Close  Volume
    0 2009-11-23  17:15  1104.00  1104.00  1104.00  1104.00       2
    1 2009-11-23  17:20  1103.00  1103.00  1103.00  1103.00      11
    2 2009-11-23  17:25  1103.75  1103.75  1103.75  1103.75       1
    3 2009-11-23  17:30  1103.25  1103.25  1102.50  1102.50       3
    4 2009-11-23  17:35  1103.25  1103.50  1103.00  1103.00      13
    

    请注意,pandas 通常会返回数据的副本,某些方法具有 inplace 参数,但 to_datetime 没有,因此您需要自行分配以覆盖:

    df['Day'] = pd.to_datetime(df['Day'])
    

    【讨论】:

    • 感谢您提供惊人的快速答复!我不知道会这么容易。你介意我再问你一个问题吗?日期转换后如何将转换后的日期放入“日”列?
    • pandas 默认返回数据的副本,所以需要自行赋值df['Day'] = pd.to_datetime(df['Day'])
    • 尽管您的第一个回答“to_datetime”回答了我的问题,但我也想尝试您的其他建议并在阅读文件时立即进行转换。不幸的是,我无法使您的行“df = pd.read_csv(io.StringIO(t), parse_dates=['Day'], index_col=0)” 工作。只有在将其更改为:“df = pd.read_csv('filename.csv', parse_dates=['Day'])”后它才能按预期工作。感谢您的学习体验!
    • 我的另一行是一个示例,而不是您应该逐字执行的代码,很高兴它有效,在读取数据时尽可能进行转换而不是作为后处理步骤进行转换是更好的性能明智
    猜你喜欢
    • 2011-10-22
    • 2011-03-18
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多