如何避免在尝试拆分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'
答案 0 :(得分:0)
您要实现的目标至少有三个问题:
datetime.date
个对象。使用对熊猫友好的pd.Timestamp
通过pd.to_datetime
创建datetime
系列。这使您可以利用NumPy数组和高效的矢量化操作。datetime.date
还是pd.Timestamp
,都是通过整数而不是字符串在内部存储的。因此,请勿尝试通过str.split
“拆分”它们。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]