【问题标题】:Attribute error ::datetime.date obect has no attribute 'split'Attributeerror ::datetime.date 对象没有属性'split'
【发布时间】:2019-03-18 10:45:59
【问题描述】:

可以做些什么来避免我尝试拆分datetime时出现的错误?我正在尝试将 datetime 拆分为年、月和日期组件。

# Split the  date (This converts each observation into a list)
previous_loans['firstduedate'] = previous_loans['firstduedate'].apply(lambda x: x.split('-'))

# Convert all elements in each observation(list) from str to int
previous_loans['firstduedate'] = previous_loans['firstduedate'].apply(lambda x: [int(y) for y in x ])

# Convert each observation into a date format
previous_loans['firstduedate'] = previous_loans['firstduedate'].apply(lambda x : date(x[0], x[1], x[2]), datetime=True)

我得到的错误是

Attribute error ::datetime.date obect has no attribute 'split'

【问题讨论】:

    标签: python pandas date datetime series


    【解决方案1】:

    您要达到的目标至少存在三个问题:

    1. 不要在 Pandas 系列中使用 datetime.date 对象。使用 Pandas 友好的pd.Timestamp 通过pd.to_datetime 创建datetime 系列。这使您可以利用 NumPy 数组和高效的矢量化操作。
    2. 日期对象,无论是datetime.date 还是pd.Timestamp,都通过整数而不是字符串在内部存储。所以不要尝试通过str.split“拆分”它们。
    3. str.split 返回一个列表。这是反熊猫,因为这意味着您要存储两层指针,即一系列本身保存指针的列表。相反,构建int 列来表示日期的组成部分。

    这是一种方法:

    from datetime import date
    
    df = pd.DataFrame({'date': [date(2018, 1, 1), date(2018, 5, 20), date(2018, 9, 11)]})
    
    df['date'] = pd.to_datetime(df['date'])
    
    L = ['year', 'month', 'day']
    df = df.join(pd.concat([getattr(df['date'].dt, i).rename(i) for i in L], axis=1))
    
    print(df)
    
            date  year  month  day
    0 2018-01-01  2018      1    1
    1 2018-05-20  2018      5   20
    2 2018-09-11  2018      9   11
    

    让您的代码与datetime.date 对象一起工作是可能的,但需要首先进行字符串转换并为您留下一系列列表。不推荐任何方法或结果:

    # AttributeError: 'datetime.date' object has no attribute 'split'
    # df['date_split'] = df['date'].apply(lambda x: x.split('-'))  
    df['date_split'] = df['date'].apply(lambda x: x.strftime('%Y-%m-%d').split('-'))
    
    print(df)
    
             date      date_split
    0  2018-01-01  [2018, 01, 01]
    1  2018-05-20  [2018, 05, 20]
    2  2018-09-11  [2018, 09, 11]
    

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 2021-05-26
      • 1970-01-01
      • 2021-04-05
      • 2017-07-02
      • 2016-01-31
      • 2016-09-19
      • 2020-09-14
      • 2021-07-25
      相关资源
      最近更新 更多