Как сохранить только определенный набор строк по индексу в панде DataFrame - PullRequest
1 голос
/ 21 октября 2019

У меня есть DataFrame, который я создал, выполнив следующие действия с файлом .fits:

data_dict= dict()
for obj in sortedpab:
    for key in ['FIELD', 'ID',  'RA' , 'DEC' , 'Z_50', 'Z_84','Z_16' , 'PAB_FLUX', 'PAB_FLUX_ERR']:
        data_dict.setdefault(key, list()).append(obj[key])

gooddf = pd.DataFrame(data_dict)
gooddf['Z_ERR']= ((gooddf['Z_84'] - gooddf['Z_50']) + (gooddf['Z_50'] - gooddf['Z_16'])) / (2 * 
gooddf['Z_50'])
gooddf['OBS_PAB'] = 12820 * (1 + gooddf['Z_50'])
gooddf.loc[gooddf['FIELD'] == "ERS" , 'FIELD'] = "ERSPRIME"
gooddf = gooddf[['FIELD' , 'ID' , 'RA' , 'DEC' , 'Z_50' , 'Z_ERR' , 'PAB_FLUX' , 'PAB_FLUX_ERR' , 
'OBS_PAB']]
gooddf = gooddf[gooddf.OBS_PAB <= 16500]

, который дает мне DataFrame с 351 строкой и 9 столбцами. Я хотел бы сохранить строки только в соответствии с определенными индексами, и я подумал, например, сделать что-то вроде этого:

indices = [5 , 6 , 9 , 10]
gooddf = gooddf[gooddf.index == indices]

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

Я нашел способ сделать это с помощью цикла for:

good = np.array([5 , 6 , 9 , 12 , 14 , 15 , 18 , 21 , 24 , 29 , 30 , 35 , 36 , 37 , 46 , 48 ])

gooddf50 = pd.DataFrame()
for i in range(len(good)):
    gooddf50 = gooddf50.append(gooddf[gooddf.index == good[i]])

Есть какие-нибудь мысли о том, как сделать это лучше, желательно используя только панд?

1 Ответ

1 голос
/ 25 октября 2019

Это поможет:

gooddf.loc[indices]

Важное замечание: .iloc и .loc делают немного разные вещи, поэтому вы можете получить неожиданные результаты.

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

...