pin_drop当前位置:知识文库 ❯ 图文
Pandas读写文件大全 - CSV Excel JSON读写教程
一、文件读写概述
在数据分析工作流程中,数据的导入和导出是最基础的环节。pandas提供了丰富的文件读写方法,支持CSV、Excel、JSON、SQL、Parquet等多种数据格式。掌握这些方法能够高效地完成数据加载和结果保存任务。
常用的读取方法包括read_csv()、read_excel()、read_json()等,对应的写入方法为to_csv()、to_excel()、to_json()等。
二、语法详解
代码示例
# 读取文件
df = pd.read_csv('data.csv')
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
df = pd.read_json('data.json')
df = pd.read_parquet('data.parquet')
# 写入文件
df.to_csv('output.csv', index=False)
df.to_excel('output.xlsx', sheet_name='数据', index=False)
df.to_json('output.json', orient='records')
df.to_parquet('output.parquet')三、参数说明
四、返回值
所有read_*方法返回DataFrame对象;所有to_*方法默认返回None(写入文件)。当文件不存在或格式不匹配时会抛出相应的异常。
五、代码示例
示例1:基本用法
代码示例
import pandas as pd
# 创建示例数据
df = pd.DataFrame({
'姓名': ['张三', '李四', '王五'],
'年龄': [25, 30, 28],
'薪资': [8000, 12000, 10000]
})
# 写入CSV
df.to_csv('employees.csv', index=False, encoding='utf-8-sig')
# 读取CSV
df_read = pd.read_csv('employees.csv')
print(df_read)
# 写入Excel
df.to_excel('employees.xlsx', sheet_name='员工信息', index=False)
# 读取Excel
df_excel = pd.read_excel('employees.xlsx', sheet_name='员工信息')
print(df_excel)示例2:进阶用法
代码示例
# 读取时指定参数
df = pd.read_csv(
'data.csv',
sep='|', # 使用|分隔符
encoding='gbk', # 中文编码
usecols=['姓名', '年龄'], # 只读指定列
dtype={'年龄': int}, # 指定数据类型
na_values=['N/A', '-'], # 识别为NaN的值
nrows=1000 # 只读前1000行
)
# 读取大文件的分块处理
chunk_iter = pd.read_csv('large_file.csv', chunksize=10000)
for chunk in chunk_iter:
# 处理每个块
print(chunk.shape)
# 追加写入CSV
df1.to_csv('output.csv', index=False, mode='w')
df2.to_csv('output.csv', index=False, mode='a', header=False)
# 多Sheet写入Excel
with pd.ExcelWriter('multi_sheet.xlsx') as writer:
df1.to_excel(writer, sheet_name='数据1', index=False)
df2.to_excel(writer, sheet_name='数据2', index=False)示例3:实际应用
代码示例
import os
# 批量读取多个CSV文件并合并
def merge_csv_files(directory):
"""合并目录下所有CSV文件"""
all_files = [f for f in os.listdir(directory) if f.endswith('.csv')]
df_list = []
for file in all_files:
filepath = os.path.join(directory, file)
df = pd.read_csv(filepath, encoding='utf-8-sig')
df['source_file'] = file # 标记来源文件
df_list.append(df)
return pd.concat(df_list, ignore_index=True)
# 读取并合并
merged_df = merge_csv_files('./data/')
print(f"合并后共 {len(merged_df)} 条记录")
# 处理结果导出
merged_df.to_csv('merged_result.csv', index=False, encoding='utf-8-sig')
# 同时导出多种格式
merged_df.to_excel('merged_result.xlsx', index=False)
merged_df.to_json('merged_result.json', orient='records', force_ascii=False)六、实际应用场景
-
ETL数据处理:从多个CSV/Excel源读取数据,清洗转换后输出到目标格式
-
报表生成:将分析结果导出为Excel,支持多Sheet、格式化输出供业务人员使用
-
大数据处理:使用chunksize分块读取超大文件,避免内存溢出
小贴士
对于超大文件,推荐使用Parquet格式替代CSV,它支持列式存储和压缩,读写速度通常快3-10倍,文件体积更小。安装依赖:pip install pyarrow。另外,写入Excel时如果数据量超过65536行,需要使用xlsx格式而非xls格式。
七、注意事项
注意1:读取含中文的CSV文件时,Windows系统生成的文件通常使用
gbk编码,需要指定encoding参数,否则会报解码错误。
注意2:写入CSV时建议使用
index=False避免输出行索引,使用encoding='utf-8-sig'确保Excel正确显示中文。
提示:读取Excel前需要安装openpyxl库(
pip install openpyxl),否则read_excel()会报错。
八、小结
-
read_csv()和to_csv()是最常用的文件读写方法 -
正确设置encoding、sep等参数可以避免大部分读取问题
-
大文件处理使用chunksize分块读取,多格式输出满足不同场景需求
九、练习题
练习1
创建一个包含10万条数据的DataFrame,分别使用CSV、Excel、Parquet格式保存,比较文件大小和读写时间。
练习2
编写一个函数,读取指定目录下所有Excel文件的所有Sheet,合并为一个DataFrame,并添加文件来源和Sheet名称列。
练习3
使用chunksize分块读取一个超过内存容量的大CSV文件,对每个块进行数据过滤后,将结果追加写入新文件。
常见问题
为什么读取CSV后中文显示为乱码?
这是编码问题。Windows系统默认使用GBK编码生成CSV,需要指定encoding='gbk'读取。建议在写入时使用utf-8-sig编码,这样Excel也能正常打开。
如何读取没有表头的CSV文件?
设置header=None参数,pandas会自动生成0、1、2...作为列名。也可以同时使用names参数指定列名。
read_csv和read_table有什么区别?
两者功能相同,唯一的区别是默认分隔符不同:read_csv默认sep=',',read_table默认sep='\t'(制表符)。
如何将DataFrame写入数据库?
使用df.to_sql('table_name', connection, if_exists='append', index=False)。需要先建立数据库连接(如SQLAlchemy engine)。
本文涉及AI创作
内容由AI创作,请仔细甄别