【问题标题】:Parsing dates to datetime on the fly in python using pandas使用 pandas 在 python 中即时将日期解析为日期时间
【发布时间】:2018-04-10 12:13:13
【问题描述】:

我有一个名为base_varlist2 的数据框,其中包含一些日期列,所有这些列都是不同格式的字符串。这是第一列的快速快照:

In [27]: print(base_varlist2.iloc[0])
completion_date_latest               07/10/2004
completion_date_original             17/05/1996
customer_birth_date_1                04/02/1963
customer_birth_date_2                       NaN
d_start                               01Feb2018
latest_maturity_date                 01/03/2027
latest_valuation_date                08/05/2004
sdate                                       NaN
startdt_def                                 NaN

如您所见,有些列是空的,有些则不是。

我需要一种将它们动态更改为日期时间值的方法,而不管它们现有的字符串格式如何。有没有办法从数据框中执行此操作,而无需为每列指定特定格式?例如,我并不总是知道d_start 是否会采用%d%b%Y 格式。

数据框由更大的原始 CSV 制成,并且包含许多其他列(不是日期),例如文本字段和数字字段。我正在使用read_csv 方法将其引入,如下所示:

source_data = pd.read_csv(loc + 'TEST_FILE.csv')

【问题讨论】:

    标签: python pandas date dataframe


    【解决方案1】:

    Pandas 的read_csv 函数支持parse_dates 参数,它可以是一个列名列表,您希望将其从str 转换为datetime。

    或者,您始终可以使用pandas.to_datetime 转换系列,例如:

    df['date'] = pandas.to_datetime(df['date'])
    

    请注意,pandas 不会假设您用于日期的格式。

    【讨论】:

    • 所以我通过遍历我的列并创建一个新的数据框来尝试这个,所有列都转换为日期时间,但是当我尝试查看结果数据集时出现错误。当我提交print(mm_dates_base.iloc[0]) 时,我得到ValueError: cannot convert float NaN to integer
    • 这很奇怪,但可能与问题没有直接关系。
    • 你是对的。我会将其标记为已完成,但我在这里提出了另一个关于此问题的问题:stackoverflow.com/questions/49756649/…
    【解决方案2】:

    不幸的是,这不起作用,需要指定每一列以解析为日期,docs:

    source_data = pd.read_csv(loc + 'TEST_FILE.csv', parse_dates=['date1','date2','date6'])
    #or specify columns by positions
    source_data = pd.read_csv(loc + 'TEST_FILE.csv', parse_dates=[0,1,6])
    

    在我看来,原因在于性能,同时还要避免将 2000 之类的数值转换为 datetimes

    【讨论】:

    • 如何以不区分大小写的方式执行此操作?我有我的日期列列表,但它们的名称在 CSV 文件中的格式略有不同...
    • @Aaraeus - 我认为不是,然后尝试按职位搜索的第二种解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-06-20
    • 2010-10-27
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多