Python CSV按列筛选导出教程:只保留需要的字段
用pandas或csv模块按列筛选CSV,只保留指定字段导出新文件,支持多列选择、列重命名、按行条件过滤,附完整代码。
场景痛点
拿到一份几十列的用户表,老板只要"手机号、姓名、注册时间"三列;或者财务只要金额大于某个数的行。手动删列、筛选、另存,几十行还行,几万行点到手酸还容易漏。用Python几行代码就把目标列抽出来另存。
用到的库
pip install pandas
完整代码
# Python CSV按列筛选并导出
import pandas as pd
import csv
def filter_columns_with_pandas(input_path, output_path):
"""
用pandas按列名筛选,再按行条件过滤。
"""
df = pd.read_csv(input_path, encoding="utf-8-sig")
# 1. 只要这三列
keep_cols = ["姓名", "手机号", "注册时间"]
# 防止列名不存在报错
keep_cols = [c for c in keep_cols if c in df.columns]
df_sub = df[keep_cols].copy()
# 2. 再加一个行条件:只要注册时间在2025年以后的(示例,按需改)
# df_sub = df_sub[df_sub["注册时间"].astype(str).str.startswith("2025")]
# 3. 列重命名
df_sub = df_sub.rename(columns={"手机号": "联系电话"})
df_sub.to_csv(output_path, index=False, encoding="utf-8-sig")
print(f"pandas筛选导出完成:{output_path},共 {len(df_sub)} 行")
def filter_columns_with_csv(input_path, output_path):
"""
用标准库csv按列下标筛选,不依赖pandas,适合超大文件流式处理。
"""
keep_index = [0, 2, 5] # 要保留的列下标(从0开始)
with open(input_path, "r", newline="", encoding="utf-8-sig") as fin, \
open(output_path, "w", newline="", encoding="utf-8-sig") as fout:
reader = csv.reader(fin)
writer = csv.writer(fout)
for i, row in enumerate(reader):
if i == 0:
# 表头也按同样下标取
writer.writerow([row[j] for j in keep_index])
else:
writer.writerow([row[j] for j in keep_index if j < len(row)])
print(f"csv模块筛选导出完成:{output_path}")
def main():
input_file = "users.csv"
out_pandas = "users_filtered_pandas.csv"
out_csv = "users_filtered_csv.csv"
filter_columns_with_pandas(input_file, out_pandas)
filter_columns_with_csv(input_file, out_csv)
if __name__ == "__main__":
main()
代码讲解
- pandas方式:
df[["列名1","列名2"]]直接切片取列,.copy()避免SettingWithCopyWarning。 - 用列表推导先过滤一下列名是否存在,防止源CSV缺列时报KeyError。
rename(columns={})顺手把列名改成对方要的叫法,省得再手动改。- csv模块方式:按列下标流式读写,内存占用极小,GB级文件也能跑。
- 行条件筛选示例注释里留了,按实际业务改判断逻辑即可。
运行结果
当前目录生成两个筛选后的CSV,只包含你指定的几列。打开新文件可以确认列数变少、数据行数正确。
注意事项
- 列名前后有空格会导致筛选失败,先
df.columns = df.columns.str.strip()清理一下。 - 行条件过滤时注意空值,
df["列"].fillna("")先填空串再判断。 - 超大文件用csv模块流式处理,别用pandas一次性读爆内存。
- 导出前
print(df_sub.columns)确认列顺序和列名符合预期。

更新时间:2026-09-14 21:04:05
上一篇:Python合并多个CSV文件教程:批量拼接成一张表