假设 df
是一个熊猫数据框架。
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']
抛出一个错误,它不会返回‘ two’。
在引用列时,iloc 更喜欢整数,而不是名称。
df.ix[2, 1]
返回“ three”,而不是2(尽管 df.idx[2, '1']
确实返回 2
)。
奇怪的是,我喜欢完全相反的功能。通常我的列名是非常有意义的,所以在我的代码中我直接引用它们。但是由于大量的观察清洗,我的熊猫数据帧中的行名通常不对应于 range(len(df))
。
我意识到我可以用:
df.iloc[0].loc['a'] # returns three
但它看起来很丑陋!有没有人知道更好的方法来实现这一点,使代码看起来像这样?
df.foo[0, 'a'] # returns three
事实上,有没有可能在 pandas.core.frame.DataFrame
中加入我自己的新方法,例如。
df.idx(rows, cols)
实际上是 df.iloc[rows].loc[cols]
?