Скажите df
- это фреймворк pandas.
-
df.loc[]
принимает только имена -
df.iloc[]
принимает только целые числа (фактические места размещения) -
df.ix[]
принимает имена и целые числа:
При обращении к строкам df.ix[row_idx, ]
требуется только имя. например
df = pd.DataFrame({'a' : ['one', 'two', 'three','four', 'five', 'six'],
'1' : np.arange(6)})
df = df.ix[2:6]
print(df)
1 a
2 2 three
3 3 four
4 4 five
5 5 six
df.ix[0, 'a']
выдает ошибку, она не возвращает "два".
При ссылках на столбцы iloc предпочитает целые числа, а не имена. например.
df.ix[2, 1]
возвращает "три", а не 2. (Хотя df.idx[2, '1']
возвращает 2
).
Как ни странно, мне бы хотелось получить совершенно противоположную функциональность. Обычно имена столбцов очень значимы, поэтому в моем коде я ссылаюсь на них напрямую. Но из-за большой очистки данных имена строк в моих кадре данных pandas обычно не соответствуют range(len(df))
.
Я понимаю, что могу использовать:
df.iloc[0].loc['a'] # returns three
Но это кажется уродливым! Кто-нибудь знает, как лучше это сделать, чтобы код выглядел так?
df.foo[0, 'a'] # returns three
На самом деле, можно ли добавить мой собственный новый метод к pandas.core.frame.DataFrame
s, так, например,
df.idx(rows, cols)
на самом деле df.iloc[rows].loc[cols]
?