基于Pandas提取指定列重构大型CSV文件的Python代码问询
处理大CSV文件并保留指定列的解决方案
Hey there! 针对你用Python 3.6.9 + Pandas处理6GB CSV、保留a/b/c/d列的需求,我整理了两种实用方案,兼顾内存效率和操作便捷性:
方案一:直接读取(内存充足时优先)
如果你的机器内存足够容纳整个数据集(比如16GB以上内存),直接读取后筛选列再保存是最省心的方式:
import pandas as pd # 读取原始CSV文件 df = pd.read_csv("your_original_file.csv") # 仅保留需要的列 filtered_df = df[["a", "b", "c", "d"]] # 保存重构后的CSV,index=False避免写入多余的索引列 filtered_df.to_csv("your_new_file.csv", index=False)
方案二:分块读取(内存紧张时必备)
6GB的CSV可能会占满内存,这时候用分块读取逐段处理更稳妥,避免内存溢出:
import pandas as pd # 设置分块大小,根据你的内存调整(比如每块10万行) chunk_size = 100000 # 定义要保留的列 keep_columns = ["a", "b", "c", "d"] # 逐块读取并处理 for i, chunk in enumerate(pd.read_csv("your_original_file.csv", chunksize=chunk_size)): # 筛选当前块的目标列 filtered_chunk = chunk[keep_columns] # 第一块写入时保留表头,后续块追加时跳过表头 filtered_chunk.to_csv("your_new_file.csv", index=False, mode="a", header=(i == 0))
额外小贴士
- 如果你预处理阶段已经做了数据清洗,确保在筛选列前的预处理步骤也适配分块逻辑(如果用方案二的话)。
- Python 3.6.9对应的Pandas版本建议用0.25.x或1.x系列,这些版本对
chunksize和mode="a"的支持都很稳定,不会出现兼容性问题。
内容的提问来源于stack exchange,提问作者ybin
相关产品推荐
相关产品推荐

