【问题标题】:DataFrame from dicts with automatic date parsing来自具有自动日期解析的dicts的DataFrame
【发布时间】:2019-05-10 19:30:33
【问题描述】:

我正在从 dicts 序列创建一个 Pandas DataFrame。 字典很大而且有些异类。 有些字段是日期。

我想自动检测和解析日期字段。 这可以通过

df0 = pd.Dataframe.from_dict(dicts)
df0.to_csv('tmp.csv', index=False)
df = pd.read_csv('tmp.csv', parse_dates=True)

我想找到一种更直接的方法来做到这一点。

【问题讨论】:

    标签: python pandas date dataframe


    【解决方案1】:

    使用pd.to_datetimeerrors='ignore'

    • 仅在使用select_dtypesdtype == object 列上使用。这可以防止将数字列转换为无意义的日期。
    • 如果遇到任何错误,'ignore' 将放弃转换尝试。
    • 使用combine_first 代替update,因为update 保留初始dtypes。由于它们是对象,这会搞砸一切。

    df.select_dtypes(include=object).apply(pd.to_datetime, errors='ignore').combine_first(df)
    
           date0      date1  feuxdate notadate
    0 2019-01-01        NaT       NaN      NaN
    1        NaT        NaT       0.0      NaN
    2        NaT        NaT       NaN       hi
    3        NaT 2019-02-01       NaN      NaN
    

    使用assign 处理dtypes 也可能变得棘手

    df.assign(**df.select_dtypes(include=object).apply(pd.to_datetime, errors='ignore'))
    

    设置

    dicts = [
        {'date0': '2019-01-01'},
        {'feuxdate': 0},
        {'notadate': 'hi'},
        {'date1': '20190201'}
    ]
    
    df = pd.DataFrame.from_dict(dicts)
    

    【讨论】:

    • @piRSquared 确定,请
    • 呸!应该保留它为你的。大部分是相同的组件(-:哦,好吧,我想我们会活下来的。
    • @piRSquared 啊哈,先生,不用担心 :-),因为 select_dtypes 是使其工作的关键 :-)
    猜你喜欢
    • 2019-11-21
    • 1970-01-01
    • 2020-09-25
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多