2016-04-22 8 views
2

Рассмотрим DataFrame data:нарезка DataFrame

    one two three four 
Ohio  2013-01-01 1  2  3 
Colorado 2014-01-05 5  6  7 
Utah  2015-05-06 9  10 11 
New York 2016-10-11 13  14 15 

Я хотел бы, чтобы извлечь строку, используя только критерий, который год является данный год, например, что-то вроде . Но команда data['one'][:][0:4] возвращает

Ohio  2013-01-01 
Colorado 2014-01-05 
Utah  2015-05-06 
New York 2016-10-11 
Name: one, dtype: object 

Я думал, что это правильная вещь, чтобы сделать, потому что команда data['one'][0][0:4] возвращает

'2013' 

Почему разница, и что это правильный способ сделать это?

ответ

4

Поскольку столбец 'one' состоит из дат, было бы лучше, чтобы есть панды признать его как таковые, вместо того, чтобы признать его как строки вы можете использовать pd.to_datetime сделать это:..

df['one'] = pd.to_datetime(df['one']) 

Это позволяет фильтровать по дате свойства без необходимости беспокоиться о нарезке строк, например, вы можете проверить на год с помощью Series.dt.year:

df['one'].dt.year == 2013 

В сочетании с loc позволяет получить все строки, где год является 2013:

df.loc[df['one'].dt.year == 2013, :] 
0

условия вы ищете

df['one'].str[0:4] == "2013" 

В принципе, вы должны сказать пандам читать вашу колонку в виде строки, а затем работать на струны из этого столбца.

Путь у вас есть это написано (df['one'][:]), говорит: «дайте мне колонку под названием„один“, а затем дать мне все из них [:].

+0

Он хочет, чтобы весь ряд я верить –

0

query работает слишком хорошо на даты и времени колоннах

In [13]: df.query('one == 2013') 
Out[13]: 
      one two three four 
Ohio 2013-01-01 1  2  3 
Смежные вопросы