我有一堆如下数据,我只想要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
。
还有其他选择吗?
答案 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