如何解决带有“ datetime.date”的熊猫Dateframe中的TypeError
我是熊猫的新手,我想在每个工作日基于具有各种日期的更大的DataFrame创建一个DataFrame。
我使用data = pd.read_csv()
方法从csv中读取我的初始数据,然后将“ Timestamp”列设置为datetime:data["Timestamp"] = pd.to_datetime(data["Timestamp"])
。
代码:
import pandas as pd
from datetime import datetime
import calendar
data = pd.read_csv("stat.csv")
data["Timestamp"] = pd.to_datetime(data["Timestamp"])
dataMonday = data.loc[calendar.day_name[datetime.weekday(data["Timestamp"])] == "Monday"]
现在,这是输出:
TypeError: descriptor 'weekday' for 'datetime.date' objects doesn't apply to a 'Series' object
到目前为止,我发现的唯一方法是在Timestamp列中使用for
循环进行迭代,但这似乎是一个糟糕的解决方案,因为我很难基于此创建另一个Dataframe。
解决方法
如错误所示,您正在尝试将weekday
函数应用于整个系列。相反,您需要在整个系列中将weekday
方法逐个元素地应用于 。 apply
是用于此目的的工具:
dataMonday = data[data["Timestamp"].apply(datetime.weekday) == "Monday"]
这里是一种添加带有工作日名称的列的方法。这种方法使用了.dt
日期访问器,并且可以快速地对该系列进行操作。
import pandas as pd
n = 8
t = pd.DataFrame({'x': [*range(n)],'Timestamp': pd.date_range(start='2020-01-01',periods=n,freq='D')})
t['Timestamp'] = pd.to_datetime(t['Timestamp']) # not needed in this example
t['weekday'] = t['Timestamp'].dt.day_name()
print(t)
x Timestamp weekday
0 0 2020-01-01 Wednesday
1 1 2020-01-02 Thursday
2 2 2020-01-03 Friday
3 3 2020-01-04 Saturday
4 4 2020-01-05 Sunday
5 5 2020-01-06 Monday
6 6 2020-01-07 Tuesday
7 7 2020-01-08 Wednesday
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。