使用csv模块写入CSV文件后是否可结合pandas删除缺失值完成数据清洗?
问题解答
csv模块和pandas的读取操作会不会冲突?
不会,两者是完全独立的工具库,读取文件时都是获取文件的独立副本,不会互相干扰,也不会修改原始的house_prices.csv文件。pandas能不能实现缺失行删除?
完全可以,你用到的df.dropna()就是专门用来删除缺失值的方法,注意默认参数inplace=False不会修改原DataFrame,只会返回处理后的新对象,你需要用变量接收结果,或者将参数改为inplace=True:
# 写法1:用新变量接收处理结果 cleaned_df = df.dropna(axis=0, how='any') # 写法2:直接修改原df df.dropna(axis=0, how='any', inplace=True)
有没有不需要额外导入库的实现方式?
有,只用原生csv模块就能实现,遍历行时判断是否存在空字段,跳过空值行即可,不需要安装pandas。你写的结合写法能不能正常运行?
语法不会报错,但完全达不到你要的清洗效果:你用pandas做的缺失值处理结果没有被用到,后续遍历的还是原始未处理的house_prices.csv文件,属于无效代码,而且没必要同时用两个库做重复的IO操作。
推荐实现方案
方案1:仅用pandas(代码最简,推荐新手使用)
import pandas as pd # 读取源文件 df = pd.read_csv('house_prices.csv') # 删除包含任意缺失值的行 cleaned_df = df.dropna(axis=0, how='any') # 写入结果文件,index=False表示不输出pandas自动生成的行号 cleaned_df.to_csv('cleaned_data.csv', index=False)
方案2:仅用原生csv模块(无需额外安装依赖)
import csv # 用with上下文管理器自动处理文件关闭,避免资源泄漏 with open('house_prices.csv', 'r', encoding='utf-8') as in_file, \ open('cleaned_data.csv', 'w', encoding='utf-8', newline='') as out_file: reader = csv.reader(in_file) writer = csv.writer(out_file) # 读取并写入表头 headers = next(reader) writer.writerow(headers) # 遍历数据行,过滤有空值的行 for row in reader: # 检查所有字段都不为空(strip用来处理全空格的无效字段) if all(field.strip() for field in row): writer.writerow(row)
内容的提问来源于stack exchange,提问作者Mathhurtsmybrain
相关产品推荐
相关产品推荐

