фрейм данных, выбирающий данные с использованием DatetimeIndex - PullRequest
0 голосов
/ 17 февраля 2019

У меня фрейм данных выглядит следующим образом:

import numpy as np
import pandas as pd    

data = {'datetime' : ['2009-07-24 02:00:00', '2009-07-24 03:00:00','2009-07-24 04:00:00'],
     'value1' : ['a', np.nan ,'c'],
     'value2' : ['d','e','f']}
df = pd.DataFrame(data)
df = df.set_index(pd.DatetimeIndex(df['datetime']))
missing = df.loc[:, df.columns != ('datetime')]

приведенные выше данные являются просто примером.но допустим, у меня много пропущенных значений в больших данных.Я хочу выбрать все данные с пропущенными значениями в столбце «value1».

missing_index = df[df['value1'].isnull()].index

этот код позволит получить все индексы пропущенных значений, но я хочу, чтобы в этом случае были реальные их строки, вторая строка.

Итак, я попытался,

df[missing_index]

, но у меня возникла ошибка:

KeyError: "DatetimeIndex (['2009-07-24 03: 00: 00 '], dtype =' datetime64 [ns] ', name =' datetime ', freq = None) нет в индексе "

Пожалуйста, помогите мне здесь.Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Ошибка связана с тем, что df[<something>] используется для получения столбцов.Когда вы вызываете df[missing_index], он пытается найти missing_index в столбцах (что также является индексом).

Самый простой способ сделать то, что вы хотите, это как @panktijk в своем комментарии:

df[df['value1'].isnull()]

Однако, если по какой-то причине (может быть, вы хотите манипулировать ими), вы хотите пойти своим путем, где вы сначала получите индексы, а затем использовать их для извлечения вашего суб-фрейма, вы можете сделать следующее:

df.loc[missing_index]
0 голосов
/ 17 февраля 2019

Я использую индекс для записи номера строки: (начало 0)

import pandas as pd
import numpy as np

data = {'datetime' : ['2009-07-24 02:00:00', '2009-07-24 03:00:00','2009-07-24 04:00:00', '2009-07-24 05:00:00'],
     'value1' : ['a', np.nan ,'c', np.nan],
     'value2' : ['d','e','f', 'g']}
df = pd.DataFrame(data)
df = df.set_index(pd.DatetimeIndex(df['datetime']))

listofnan = df.index[df['value1'].isnull()].tolist()

for i in listofnan:
    print(df.index.get_loc(i)) 

результат:

1
3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...