pin_drop当前位置:知识文库 ❯ 图文

Pandas读写文件大全 - CSV Excel JSON读写教程

Pandas DataFrame读写文件完整教程

一、文件读写概述

在数据分析工作流程中,数据的导入和导出是最基础的环节。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_csv() filepath_or_buffer 文件路径或URL
sep/delimiter 分隔符,默认','
header 表头行号,默认0(第一行),None表示无表头
encoding 文件编码,常用'utf-8'/'gbk'/'gb2312'
usecols 指定要读取的列列表
dtype 指定列的数据类型字典
read_excel() sheet_name 工作表名称或索引,默认0
engine 解析引擎,'openpyxl'/'xlrd'
读取.xls需安装xlrd,.xlsx需安装openpyxl
to_csv() index 是否写入行索引,通常设为False
encoding 输出编码,中文推荐'utf-8-sig'
mode 写入模式,'w'覆盖/'a'追加

四、返回值

所有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)。

标签: pandas 文件读写 read_csv to_csv Excel Python教程

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Pandas字符串操作str完整教程 - 正则提取实战 下一篇: matplotlib库简介与安装教程 - Python数据可视化入门

poll相关推荐