【问题标题】:construct datetime index columns using date_parser function使用 date_parser 函数构造日期时间索引列
【发布时间】:2016-05-21 06:53:00
【问题描述】:

我想从数据框的多列创建日期时间索引。

由于需要转换日期时间输入,因此我在read_csv 中使用类似于date_parserdate_parser

我尝试在数据框行上应用解析器功能。但由于它没有矢量化,我得到了一个错误。

这是一个简化的例子:

data = """
2015;1;1;4
2015;1;2;4
2015;1;3;4
2015;1;4;4
2015;1;5;4
"""

import datetime as dt
import pandas as pd
from io import StringIO


df = pd.read_csv(StringIO(data), sep=';')
print (df)

def date_parser(year, month, day):
    res = dt.datetime(year, month, day)
    return res

df['dt'] = (myfunc(df.iloc[:,0], df.iloc[:,1], df.iloc[:,2]))
#or
df['dt'] = df.apply(myfunc(df.iloc[:,0], df.iloc[:,1], df.iloc[:,2]), axis=1)

TypeError: cannot convert the series to <class 'int'>

这个有效

def date_parser_s(y, m, d):
   r = dt.datetime(y, m, d)

   return r 

string_form = df.apply(lambda r: date_parser_dt(r[0], r[1], r[2]), axis=1)

但这个不是:

string_form = df.apply(date_parser_dt(df[0], df[1], df[2]), axis=1)

您可以帮忙提供一个非 lambda 版本吗?

我将不胜感激。

【问题讨论】:

    标签: datetime pandas indexing data-structures dataframe


    【解决方案1】:

    由于数据帧中的每一行都调用了该函数,因此将其作为参数:

    def date_parser(ymd):
       return dt.datetime(ymd[0], ymd[1], ymd[2])
    
    data = '''year;month;day;stuff
    2015;1;1;4
    2015;1;2;4
    2015;1;3;4
    2015;1;4;4
    2015;1;5;4
    '''
    
    df = pd.read_csv(io.StringIO(data), sep=';')
    df.apply(date_parser, axis=1)
    
    0   2015-01-01
    1   2015-01-02
    2   2015-01-03
    3   2015-01-04
    4   2015-01-05
    dtype: datetime64[ns]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 2018-10-22
      • 2012-12-23
      • 2019-08-06
      • 1970-01-01
      • 2021-12-29
      相关资源
      最近更新 更多