Вы, кажется, не делать то, что мы просим, так вот код, который показывает, что если вы сделали то, что я спросил, что это будет работать:
In [11]:
import io
import pandas as pd
t="""4be390eefaf9a64e7cb52937c4a5c77a,"e1.ru",2014-09-30 18:14:58,57,4
4be390eefaf9a64e7cb52937c4a5c77a,"e1.ru",2014-09-30 20:11:15,1884,90
4be390eefaf9a64e7cb52937c4a5c77a,"e1.ru",2014-10-04 09:44:21,1146,6
4be390eefaf9a64e7cb52937c4a5c77a,"avito.ru",2014-09-29 21:01:29,48,3"""
df = pd.read_csv(io.StringIO(t), header=None, parse_dates=[2])
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 4 entries, 0 to 3
Data columns (total 5 columns):
0 4 non-null object
1 4 non-null object
2 4 non-null datetime64[ns]
3 4 non-null int64
4 4 non-null int64
dtypes: datetime64[ns](1), int64(2), object(2)
memory usage: 192.0+ bytes
вы можете видеть из вышесказанного следует, что dtype
на 3-й колонке теперь datetime64
то вы можете использовать dt.year
доступ к компоненту года и groupby
в том, что:
In [14]:
df.groupby(df[2].dt.year).first()
Out[14]:
0 1 2 3 4
2
2014 4be390eefaf9a64e7cb52937c4a5c77a e1.ru 2014-09-30 18:14:58 57 4
Вы можете задать фильтры или маску с помощью этого атрибута:
In [15]:
df[2].dt.year
Out[15]:
0 2014
1 2014
2 2014
3 2014
Name: 2, dtype: int64
можно сравнить выше скалярное значение или тест для членства, используя isin
e.t.c.
Что вы пробовали:
datetime.strptime('used_at', "%Y-%m-%d %H:%M:%S")
бессмысленна strptime
принимает строку DATETIME, вы, вероятно, хотел передать столбец:
datetime.strptime(df['used_at'], "%Y-%m-%d %H:%M:%S")
но это будет не в состоянии, как strptime
принимает скалярные значения, а не серия панд.
если ты df['used_at'].apply(lambda x: datetime.strptime(x, "%Y-%m-%d %H:%M:%S"))
тогда он будет работать, но это медленно, вы можете использовать to_datetime
для достижения того же результата, но это vectorised:
pd.to_datetime(df['used_at'])
Вы можете просто разобрать, что в качестве даты и времени с помощью '' read_csv' так read_csv (file_path, parse_dates = [2]) ', то вы можете сделать' df.groupby (df ['date_col']. dt.year) ' – EdChum
Это не работает. У меня есть ошибка: можно использовать только .dt accessor с datetimelike значениями – ldevyataykina
Можете ли вы отредактировать свой пост с более подробными данными и кодом, который вызывает эту ошибку, спасибо – EdChum