因此,我想选择数据框的前10行,但要使用特定的列名(例如“价格”)。显然我可以这样做:
df.iloc [0:10] ['Price']
但是我要避免链接索引。有没有办法做到这一点?我无法使用LOC,因为没有编号为0、1、2等的索引。
答案 0 :(得分:1)
将iloc
与命名列结合使用的其他几种方式:
df.iloc[:10, df.columns.get_loc('Price')]
或
df.iloc[:10, (df.columns=='Price').nonzero()[0]]
答案 1 :(得分:0)
上面的第一个答案是完美的,但是如果您使用它数百万次(使用大数据),它会非常昂贵。出于这个原因,您应该使用字典进行一次数字映射,以便您可以直接访问本质上是矩阵的 [X,Y] 索引:
columnNumber = {}
for key in df.columns:
columnNumber[key] = df.columns.get_loc(key)
然后您可以反复重用,尤其是在操作子帧时,例如:
# Important for complicated manipulation of yearly records
yearlySubFrames = df.groupby(['Year'])
for year, yearFrame in yearlySubFrames:
columnNumber = {}
for key in yearFrame.columns:
columnNumber[key] = yearFrame.columns.get_loc(key)
...
... multiple iloc operations on each subframe ...
请注意,如果您不删除链接,则日志文件或屏幕输出中的警告数量将达到数百个,这非常烦人。
但是需要注意的一点是,如果您先引用列然后编辑行项目,链接会快得多。它的计算效率提高了大约 50% 到 100%(这是我对大数据的发现)。这让人非常沮丧。
另外,我发现使用 iat 并不是没有副作用。我用它代替,它几乎在任何地方都能给出正确的答案,但有时会失败。疯狂的东西!