如何在Pandas中删除某列第三个字符为W的行?
删除DataFrame中ID列第三个字符为'W'的行
原始DataFrame
| ID | Jan | Feb | Mar |
|---|---|---|---|
| 20WAST | 2 | 2 | 5 |
| 20S22 | 0 | 0 | 1 |
| 20W1ST | 2 | 2 | 5 |
| 200122 | 0 | 0 | 1 |
期望输出
| ID | Jan | Feb | Mar |
|---|---|---|---|
| 20S22 | 0 | 0 | 1 |
| 200122 | 0 | 0 | 1 |
问题分析
你之前写的df[df.ID[2] != 'W']只选中第二行,是因为df.ID[2]取的是ID列第三行的单个元素(Python索引从0开始),而非对每行的ID字符串取第三个字符,这种写法仅能判断单一行的ID,自然得不到正确结果。
高效解决方案
针对大型DataFrame,必须用矢量化操作替代遍历,既高效又简洁:
方法1:生成筛选后的新DataFrame
df_filtered = df[df['ID'].str[2] != 'W']
df['ID'].str[2]会对ID列的每个字符串取索引为2的字符(即第三个字符),返回一个与原DataFrame行数匹配的布尔Series,用它做索引即可筛选出所有符合条件的行。
方法2:原地删除目标行
如果无需保留原DataFrame,可直接在原数据上删除:
df.drop(df[df['ID'].str[2] == 'W'].index, inplace=True)
内容的提问来源于stack exchange,提问作者Ray234
相关产品推荐
相关产品推荐

