str包含datetime64 pandas的等效项

时间:2019-06-04 22:01:41

标签: python pandas datetime contains

我有一堆如下数据,我只想要2019年条目。

+----------+
|   Date   |
+----------+
| 20190329 |
| 20180331 |
| 20190331 |
| 20180331 |
| 20190401 |
+----------+

日期类型为datetime64[ns]。在检查类型之前,我尝试过df = df[df['Date'].str.contains('2019')],它给出了AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas

还有其他选择吗?

3 个答案:

答案 0 :(得分:3)

如果格式为datetime64[ns],则可以执行以下操作:

df=df[df.Date.dt.year==2019]

答案 1 :(得分:2)

好像您有一列整数。在这种情况下,我建议的解决方案是将日期时间转换为日期时间,然后访问year属性:

pd.to_datetime(df['Date'].astype(str)).dt.year == 2019  # you compare ints

0     True
1    False
2     True
3    False
4     True
Name: Date, dtype: bool

df[pd.to_datetime(df['Date'].astype(str)).dt.year == 2019]

       Date
0  20190329
2  20190331
4  20190401

另一种替代方法(速度稍快,但由于可能会被滥用,因此我不喜欢这样做)是将字符串切成薄片并进行比较:

df['Date'].astype(str).str[:4] == '2019'  # you compare strings

0     True
1    False
2     True
3    False
4     True
Name: Date, dtype: bool

答案 2 :(得分:1)

也许用//

检查
(df.Date//10000).eq(2019)
Out[58]: 
0     True
1    False
2     True
3    False
4     True
Name: Date, dtype: bool