print(testSeries)
#output
2848 2020-10-03 14:52:44
2849 2020-10-03 14:54:26
2850 2020-10-04 01:52:01
2851 NaT
2852 NaT
Name: 4, dtype: datetime64[ns]
可以看到,dtype是datetime64,因为我已经将元素从字符串转换为datetime了。如果我隔离单个元素,则element.day或element.hour之类的东西会正常工作。 (testSeries.iloc [0] .day工作)
现在,我想像这样创建一个布尔蒙版:
print(testSeries.day == 3)
#Expected Output
[True, True, False, False, False]
# ACTUAL output
AttributeError: 'Series' object has no attribute 'day'
我想按日期,月份,年份,小时,分钟等的任意组合进行过滤。但是此方法不起作用。
要么我必须使用for循环并检查每个元素 要么 使用新定义的函数并将其映射到该系列以创建布尔掩码。
有没有比我尝试过但失败的更简单的解决方案?
答案 0 :(得分:1)
使用.dt
祖先:
print(testSeries.dt.day == 3)
0 True
1 True
2 False
3 False
4 False
Name: 4, dtype: bool
如果列:
#if 4 is string
print(df['4'].dt.day == 3)
#if 4 is int
print(df[4].dt.day == 3)
对于过滤器,请使用boolean indexing
,而不要使用where
:
df1 = df[df[4].dt.day == 3]