python提取年月日遇到的问题:‘Series‘ object has no attribute ‘month‘ 和 ‘str‘ object has no attribute ‘month‘报错
数据分析中经常要对日期特征进行拆分,提取年份、月份和日期等信息。过程中遇到这样的报错:AttributeError: ‘Series’ object has no attribute ‘month’AttributeError: ‘str’ object has no attribute ‘month’问题分析一:数据的格式不对使用datetime模块在dataframe表格中提取日期中的月份信息
数据分析中经常要对日期特征进行拆分,提取年份、月份和日期等信息。
1. 获取年月日的基本方法:
from datetime import *
# 获取当天的年月日信息:
year = datetime.now().year
month = datetime.now().month
day = datetime.now().day
print("year:", year)
print("month:", month)
print("day:", day)
这种方式仅适用于单个日期数据的提取,而在现实的数据分析中,一般是导入数据后就转换为dataframe,于是过程中经常遇到这样的报错:
- AttributeError: ‘Series’ object has no attribute ‘month’
- AttributeError: ‘str’ object has no attribute ‘month’
2. 问题分析一:数据的格式不对
使用datetime模块在dataframe表格中提取日期中的月份信息,需要使用map()/apply() 函数来实现(df[“month”] = df[“date”].apply(lambda x: x.month)
# 1. 建立含日期的数据表
set1 = {"date": ["2021.01.01", "2019.02.15", "2021.03.20", "2021.01.15", "2019.01.25"],
"category": ["A", "D", "B", "A", "B"],
"value": [100, 50, 200, 180, 300]}
df = pd.DataFrame(set1, columns=["date", "category", "value"])
df
这时的df[“date”]的类型是str(查看语句:type(df[“date”][0]), 不能直接提取信息,需要进行类型的转换:str类型 – > datetime类型;否则会报错:AttributeError: ‘str’ object has no attribute ‘month’
# 2. 将dataframe中的数据类型从str转换为datetime类型
from datetime import *
df["date"] = df["date"].map(lambda x: datetime.strptime(x, "%Y.%m.%d"))
df["date"]
这时候还不能直接提取,会报错 - AttributeError: ‘Series’ object has no attribute ‘month’, 可使用map/apply函数来解决
# 3. 使用map()或apply()函数对日期特征进行年、月、日的提取
from datetime import *
df["year"] = df["date"].map(lambda x: x.year)
df["month"] = df["date"].map(lambda x: x.month)
df["day"] = df["date"].map(lambda x: x.day)
df
小结:年、月、日的信息都被提取出来了!
3. 问题分析二:源数据中存在错误记录
经历分享:过程中数据的格式、使用方法都是正确的,但是一直在报错:
AttributeError: ‘str’ object has no attribute ‘month’
是因为源数据中存在错误信息,如2020-08-31被错误记录为"8/311", 系统无法识别而报错,只要将错误信息更正就能解决问题了。
更多推荐
所有评论(0)