Python批量处理CSV文件,提取指定列并保留原文件名
本文介绍如何使用Python批量处理多个CSV文件,提取指定列的数据,并保持输出文件名与输入文件名的一致性。 这对于需要从大量CSV文件中提取特定信息的情况非常有用。
首先,我们需要导入必要的库:os
用于文件路径操作,pandas
用于高效处理CSV数据。
接下来,按照以下步骤进行操作:
获取CSV文件路径: 使用os.listdir()
列出当前目录下所有文件,并筛选出以.csv
结尾的文件,得到完整的路径列表。
循环处理每个CSV文件: 遍历文件路径列表,对每个CSV文件进行处理。
读取CSV文件: 使用pandas.read_csv()
函数读取每个CSV文件到一个Pandas DataFrame中。
提取指定列: 根据列名(例如'column_name'
)提取所需的列数据。
处理重复值(可选): 如果需要去除重复值,可以使用drop_duplicates()
方法。 这需要指定检查重复值的列。
保存输出文件: 使用to_csv()
方法将提取的列数据保存为新的CSV文件。 文件名使用原文件名加上前缀(例如'output_'
),确保与原文件对应。
示例代码:
import os
import pandas as pd
# 获取当前工作目录
cwd = os.getcwd()
# 获取所有CSV文件的路径
csv_files = [os.path.join(cwd, file) for file in os.listdir(cwd) if file.endswith('.csv')]
# 遍历每个CSV文件
for file_path in csv_files:
try:
# 读取CSV文件
df = pd.read_csv(file_path)
# 提取指定列 (请替换 'column_name' 为实际列名)
extracted_column = df['column_name']
# 处理重复值 (可选,请替换 'column_to_check' 为实际列名)
# if df['column_to_check'].duplicated().any():
# extracted_column = extracted_column.drop_duplicates()
# 创建输出文件名
output_file_path = os.path.join(cwd, 'output_' + os.path.basename(file_path))
# 保存输出文件
extracted_column.to_csv(output_file_path, index=False, header=['column_name']) # 添加header
except pd.errors.EmptyDataError:
print(f"Warning: File {file_path} is empty. Skipping.")
except pd.errors.ParserError:
print(f"Warning: Error parsing file {file_path}. Skipping.")
except KeyError as e:
print(f"Error: Column '{e.args[0]}' not found in {file_path}. Skipping.")
print("批量提取完成!")
注意: 请将代码中的'column_name'
替换成您需要提取的列的实际名称。 可选的重复值处理部分也需要根据实际情况修改列名。 代码增加了错误处理,可以应对空文件或解析错误的情况。 最后,header=['column_name']
确保输出文件包含列名。
使用 Asyncio 进行异步编程
掌握数据争吵:开发人员的简单指南
如何用Python计算已知三边长的三角形面积?
Python调用JS函数时出现UnicodeEncodeError:如何解决编码问题?
在使用Python和Selenium进行网页爬虫时,多线程并发执行偶尔报错而单线程却没有问题,这种现象通常是由以下几个原因导致的:浏览器实例共享问题: Selenium在多线程环境下,如果多个线程试图同时操作同一个浏览器实例,可能会导致冲突。每个线程应该使用独立的浏览器实例,但如果没有正确管理,可能会出现浏览器实例被多个线程共享的情况,从而引发异常。解决方案:确保每个线程都有自己的浏览器实例。例如,可以在每个线程中创建和管理自己的浏览器实例。from selenium import webdriver i
Pydantic BaseModel默认值:列表共享的坑与解决方法