如何将Pandas中筛选行+选列的两行代码合并为一行?
正确的单行写法
直接使用loc方法同时完成行筛选与列选择,这是Pandas官方推荐的安全写法,能避免链式索引带来的各种问题:
new_df = df.loc[df['proline'] > 1000, ['alcohol', 'malic_acid', 'ash', 'color_intensity', 'hue']]
常见错误原因解析
你合并时触发的TypeError或KeyError,大概率是踩了以下两种坑:
- 错误写法1(先选列再筛选行):
这种写法先提取指定列后,子DataFrame中已无new_df = df[['alcohol', 'malic_acid', 'ash', 'color_intensity', 'hue']][df['proline'] > 1000]proline列,若后续误写为df_selected['proline']会直接触发KeyError;即便用原df['proline'],筛选逻辑也会和子DataFrame的行索引不匹配,导致结果异常。 - 错误写法2(链式索引的视图风险):
这种写法偶尔能运行,但会触发new_df = df[df['proline'] > 1000][['alcohol', 'malic_acid', 'ash', 'color_intensity', 'hue']]SettingWithCopyWarning——链式索引返回的可能是原DataFrame的视图而非副本,后续修改new_df可能意外污染原数据;若原df存在重复索引,还可能抛出TypeError。
loc方法通过一次索引完成行、列的精准定位,逻辑清晰且完全规避上述问题。
内容的提问来源于stack exchange,提问作者kcats_wolf
相关产品推荐
相关产品推荐

