str содержит эквивалент для datetime64 панд - PullRequest
1 голос
/ 05 июня 2019

У меня есть куча данных следующим образом, и я хочу только 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 ]

3 голосов
/ 05 июня 2019

Если он в формате datetime64[ns], вы можете сделать что-то простое:

df=df[df.Date.dt.year==2019]
2 голосов
/ 05 июня 2019

Похоже, у вас есть столбец целых чисел.В этом случае моим рекомендуемым решением будет преобразование в datetime, после чего вы получите доступ к атрибуту 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
1 голос
/ 05 июня 2019

Может проверить с //

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