熊猫:遮罩/使用日期的地方[不得使用日期作为索引]

时间:2020-10-05 12:53:01

标签: python pandas datetime timestamp

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循环并检查每个元素 要么 使用新定义的函数并将其映射到该系列以创建布尔掩码。

有没有比我尝试过但失败的更简单的解决方案?

1 个答案:

答案 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]