Pandas DataFrame删除指定行失效求助:爬虫生成CSV仍保留目标行
解决DataFrame删除指定行后仍保留的问题
这一操作本应十分简单,但我却遇到了瓶颈。以下代码用于抓取统计数据,我希望从生成的DataFrame表格中删除第20行及其他若干行。但运行代码后,导出的CSV文件中仍包含第20行,恳请各位提供解决办法。
用户提供的代码片段:
import requests from random import choice from bs4 import BeautifulSoup import pandas as pd desktop_agents = ['Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36', 'Mozilla/5.0 (Windows NT 10.0; WOW64)...'] # 省略页面抓取、解析及DataFrame生成、行删除的后续代码
嘿,我来帮你排查下这个问题!你遇到的核心问题大概率是删除行的操作没有真正作用到最终导出的DataFrame上,常见的几个原因和解决办法如下:
忘记重新赋值或使用
inplace=True:Pandas的drop()方法默认返回一个删除指定行后的新DataFrame,不会修改原对象。如果只写了df.drop(20)而没把结果存回df,原数据根本没变化。正确写法二选一:# 方式1:重新赋值给原变量 df = df.drop(目标行索引) # 方式2:使用inplace参数直接修改原对象 df.drop(目标行索引, inplace=True)混淆了位置索引和标签索引:你说的“第20行”要分清楚是哪种索引:
- 如果是从0开始计数的位置第20行,对应的索引是19,要这么删:
df = df.drop(df.index[19]) - 如果是行标签(index值)为20的行,直接删标签即可:
df = df.drop(20)
- 如果是从0开始计数的位置第20行,对应的索引是19,要这么删:
删除多行的姿势不对:如果要删除若干行,比如位置第20、25、30行,要传入索引列表:
df = df.drop(df.index[[19, 24, 29]])如果是删除标签为20、25、30的行:
df = df.drop([20, 25, 30])导出前验证数据状态:建议在导出CSV前加一行
print(df.shape)或者print(df.head(30)),确认删除操作后的DataFrame已经去掉了目标行,这样能快速区分是删除逻辑问题还是导出环节的问题。
举个完整的示例,假设你要删除位置第20行和标签为25的行,然后导出:
# 假设已经生成了目标DataFrame df # 删除位置第20行(索引19) df = df.drop(df.index[19]) # 删除标签为25的行 df.drop(25, inplace=True) # 导出CSV df.to_csv('统计数据.csv', index=False)
你可以先检查下自己的代码是不是踩了上面的坑,尤其是重新赋值或inplace参数的使用,这是最容易忽略的点!
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

