python提取年月日遇到的问题:‘Series‘ object has no attribute ‘month‘ 和 ‘str‘ object has no attribute ‘month‘报错

数据分析中经常要对日期特征进行拆分,提取年份、月份和日期等信息。

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", 系统无法识别而报错,只要将错误信息更正就能解决问题了。

  • 17
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
根据提供的引用内容,出现了两个不同的AttributeError错误。第一个错误是在使用rsa库时出现的,错误信息为"'str' object has no attribute 'n'"。第二个错误是在客户环境中出现的,错误信息为"'Channel' object has no attribute 'update_environment_variables'"。 针对第一个错误,"'str' object has no attribute 'n'",这个错误通常是因为将字符串对象传递给了期望是RSA密钥对象的函数或方法。要解决这个错误,需要确保传递给RSA函数或方法的参数是正确的RSA密钥对象,而不是字符串对象。 针对第二个错误,"'Channel' object has no attribute 'update_environment_variables'",这个错误通常是因为在Channel对象上调用了一个名为'update_environment_variables'的属性或方法,但该属性或方法在Channel对象中不存在。要解决这个错误,需要检查代码中是否正确地创建了Channel对象,并确保该对象具有'update_environment_variables'属性或方法。 以下是两个问题的解决方法: 1. 解决使用rsa库时出现的错误: ```python import rsa # 生成RSA密钥对 (public_key, private_key) = rsa.newkeys(512) # 使用公钥加密 message = "Hello World" encrypted_message = rsa.encrypt(message.encode(), public_key) # 使用私钥解密 decrypted_message = rsa.decrypt(encrypted_message, private_key) print(decrypted_message.decode()) # 输出:Hello World ``` 2. 解决客户环境中出现的错误: ```python class Channel: def __init__(self): self.environment_variables = {} def update_environment_variables(self, variables): self.environment_variables.update(variables) # 创建Channel对象 channel = Channel() # 更新环境变量 variables = {'key1': 'value1', 'key2': 'value2'} channel.update_environment_variables(variables) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值