如何优雅结合Pandas的.loc与.iloc选择特定行和列?
解决方案
当然有更简洁优雅的方式,你可以一步完成行与列的选择,同时避免链式索引可能带来的潜在问题(比如SettingWithCopyWarning)。
方法1:用iloc结合列位置索引(推荐)
直接通过df.columns.get_indexer()将目标列名转换为位置索引,再配合iloc选中指定行:
df.iloc[2:4, df.columns.get_indexer(['id', 'person'])]
iloc[2:4]精准选中位置索引为2、3的行(Pandas切片遵循左闭右开规则)df.columns.get_indexer(['id', 'person'])把列名映射为对应的位置索引,确保选中id和person列
方法2:结合loc与iloc的写法
如果一定要同时用到loc和iloc,可以先通过iloc获取目标行的索引标签,再用loc选择列:
df.loc[df.iloc[2:4].index, ['id', 'person']]
不过这种写法逻辑绕弯,不如第一种方式简洁高效。
原写法的问题
你之前用的df.loc[:, ['id', 'person']][2:4]属于链式索引,Pandas无法明确返回的是原DataFrame的视图还是副本,后续如果对结果做修改,可能出现意料之外的行为,一步到位的写法能规避这个风险。
内容的提问来源于stack exchange,提问作者equanimity
相关产品推荐
相关产品推荐

