数据分析(四):Python Pandas数据输入输出全流程指南

Python Pandas数据输入输出全流程指南

1. 引言

数据输入输出(I/O)是数据分析工作流中最基础也是最重要的环节之一。Pandas提供了丰富的数据读写接口,支持从各种文件格式和数据库中加载数据,以及将处理后的数据保存到不同存储系统中。本文将全面介绍Pandas的数据I/O功能,包括常见文件格式解析、数据库交互、大数据处理技巧和高效存储格式。

2. 文件格式解析

2.1 CSV文件读写

import pandas as pd# 读取CSV文件
df = pd.read_csv('data.csv', encoding='utf-8', sep=',', header=0)# 查看前5行
print(df.head())# 写入CSV文件
df.to_csv('output.csv', index=False, encoding='utf-8')# 参数说明:
# - encoding: 文件编码(常用utf-8, gbk等)
# - sep: 分隔符(默认',')
# - header: 指定作为列名的行号(默认0,即第一行)
# - index: 是否写入行索引(默认True)

应用场景:CSV是最通用的数据交换格式,适合中小型数据集。

2.2 Excel文件读写

# 读取Excel文件
excel_data = pd.read_excel('data.xlsx', sheet_name='Sheet1')# 查看数据
print(excel_data.head())# 写入Excel文件
excel_data.to_excel('output.xlsx', sheet_name='Results', index=False)# 读取多个sheet
with pd.ExcelFile('data.xlsx') as xls:df1 = pd.read_excel(xls, 'Sheet1')df2 = pd.read_excel(xls, 'Sheet2')# 写入多个sheet
with pd.ExcelWriter('output_multi.xlsx') as writer:df1.to_excel(writer, sheet_name='Data1')df2.to_excel(writer, sheet_name='Data2')

注意事项:处理Excel文件需要安装openpyxlxlrd库。

2.3 JSON文件读写

# 读取JSON文件
json_data = pd.read_json('data.json', orient='records')# 查看数据
print(json_data.head())# 写入JSON文件
json_data.to_json('output.json', orient='records', indent=2)# 参数说明:
# - orient: JSON格式(records, columns, index等)
# - indent: 缩进空格数(美化输出)# 从API获取JSON数据
import requests
url = 'https://api.example.com/data'
response = requests.get(url)
api_data = pd.read_json(response.text)

应用场景:Web API交互、半结构化数据存储。

2.4 其他文件格式

# Parquet文件(列式存储)
df = pd.read_parquet('data.parquet')
df.to_parquet('output.parquet')# HTML表格(读取网页中的表格)
html_tables = pd.read_html('https://example.com/table.html')# Pickle文件(Python对象序列化)
df.to_pickle('data.pkl')
df = pd.read_pickle('data.pkl')

3. 数据库交互

3.1 使用SQLAlchemy连接数据库

from sqlalchemy import create_engine# 创建数据库连接引擎(MySQL示例)
# 格式: dialect+driver://username:password@host:port/database
engine = create_engine('mysql+pymysql://user:password@localhost:3306/mydb')# 读取数据到DataFrame
query = "SELECT * FROM customers WHERE age > 30"
df = pd.read_sql(query, engine)# 写入数据到数据库
df.to_sql('new_table', engine, if_exists='replace', index=False)# 参数说明:
# - if_exists: 表存在时的行为(fail, replace, append)
# - index: 是否将索引作为列写入

3.2 PostgreSQL交互示例

# PostgreSQL连接示例
pg_engine = create_engine('postgresql+psycopg2://user:password@localhost:5432/mydb')# 执行复杂查询
complex_query = """SELECT c.name, COUNT(o.id) as order_countFROM customers cLEFT JOIN orders o ON c.id = o.customer_idGROUP BY c.nameORDER BY order_count DESC
"""
result = pd.read_sql(complex_query, pg_engine)

3.3 分块读取大型表

# 分块读取大型表
chunk_size = 10000
chunks = pd.read_sql_table('large_table', engine, chunksize=chunk_size)for chunk in chunks:# 处理每个数据块processed_chunk = chunk[chunk['value'] > 100]# 保存处理结果或进一步分析processed_chunk.to_sql('processed_data', engine, if_exists='append', index=False)

优势:避免内存不足问题,适合处理超大型数据库表。

4. 大数据处理技巧

4.1 分块读取大型文件

# 分块读取大型CSV文件
chunk_size = 50000
chunks = pd.read_csv('large_file.csv', chunksize=chunk_size)result_list = []
for chunk in chunks:# 对每个数据块进行处理filtered_chunk = chunk[chunk['sales'] > 1000]result_list.append(filtered_chunk)# 合并所有处理结果
final_result = pd.concat(result_list)

应用场景:处理内存无法容纳的超大型文件。

4.2 指定数据类型优化内存

# 读取时指定数据类型减少内存使用
dtype_dict = {'id': 'int32','name': 'category','value': 'float32','flag': 'bool'
}df = pd.read_csv('large_data.csv', dtype=dtype_dict)
print(df.memory_usage(deep=True))

效果:可显著减少内存占用,特别是对于包含字符串的列。

5. 高效数据存储格式

5.1 HDF5格式

# 存储到HDF5文件
df.to_hdf('data.h5', key='df', mode='w')# 从HDF5读取
df = pd.read_hdf('data.h5', key='df')# 存储多个DataFrame
store = pd.HDFStore('dataset.h5')
store['df1'] = df1
store['df2'] = df2
store.close()# 读取特定数据集
with pd.HDFStore('dataset.h5') as store:df1 = store['df1']df2 = store.get('df2')

特点:支持高效压缩,适合存储大型科学数据集。

5.2 Feather格式

# 存储为Feather格式
df.to_feather('data.feather')# 读取Feather文件
df = pd.read_feather('data.feather')# 特点:
# - 读写速度极快
# - 支持跨语言(R/Python)
# - 不适合长期存储(格式可能变化)

5.3 性能对比

import timeformats = ['csv', 'parquet', 'hdf', 'feather']
times = {}for fmt in formats:start = time.time()if fmt == 'csv':df.to_csv('test.csv', index=False)elif fmt == 'parquet':df.to_parquet('test.parquet')elif fmt == 'hdf':df.to_hdf('test.h5', key='data', mode='w')elif fmt == 'feather':df.to_feather('test.feather')times[f'write_{fmt}'] = time.time() - start# 类似地测试读取时间...

6. 数据I/O最佳实践

  1. 数据安全
    • 读写操作使用try-except处理异常
    • 重要数据写入前先备份
    • 数据库操作使用事务
from sqlalchemy.exc import SQLAlchemyErrortry:df.to_sql('important_data', engine, if_exists='replace')engine.execute("COMMIT")
except SQLAlchemyError as e:print(f"Database error occurred: {e}")engine.execute("ROLLBACK")
  1. 性能优化

    • 大数据集使用分块处理
    • 合理选择存储格式
    • 指定数据类型减少内存使用
  2. 数据验证

    • 读取后检查行数、列数和数据类型
    • 验证关键统计量是否符合预期
# 数据验证示例
def validate_data(df):assert len(df) > 0, "数据为空"assert 'id' in df.columns, "缺少ID列"assert df['value'].isna().sum() == 0, "存在空值"return True

7. 总结

  1. 文件格式支持

    • 结构化数据:CSV、Excel
    • 半结构化数据:JSON
    • 高效二进制格式:Parquet、HDF5、Feather
  2. 数据库交互

    • 使用SQLAlchemy作为统一接口
    • 支持MySQL、PostgreSQL等主流数据库
    • 分块处理大型表数据
  3. 大数据处理

    • chunksize参数分块读取
    • 指定dtype减少内存占用
    • 使用高效二进制格式存储中间结果
  4. 存储选择建议

    • 快速读写:Feather
    • 长期存储:Parquet或HDF5
    • 数据交换:CSV或JSON

Pandas强大的I/O功能使其成为数据科学工作流中的核心工具。掌握这些数据输入输出技术,能够让你:

  • 高效地从各种数据源获取数据
  • 处理超大规模数据集
  • 选择最适合的存储格式
  • 构建稳健的数据处理管道

在实际项目中,应根据数据规模、性能需求和使用场景,灵活选择和组合这些I/O方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/80872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能与机器学习:Python从零实现性回归模型

🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创AI未来! 🚀 前言 在 AI 的热潮中,很容易忽视那些让它得以实现的基础数学和技…

Ubuntu18.04更改时区(图文详解)

Ubuntu18.04更改时区 1、前言2、更改时区3、总结 1、前言 记录一下Ubuntu18.04更改时区的过程,方便自己日后回顾,也可以给有需要的人提供帮助。 2、更改时区 输入下面的指令,进行时区选择 tzselect输入4选择亚洲,输入9选择中…

vue2 项目使用vite2 升级 vite4 后,对别名的解析有问题,导致打包后项目无法正常运行

问题描述: 之前使用的 vite2 版本,需要在 vite.config 里配置 vue 别名,不然会有commonjs 的依赖包找不到 vue,因为 vite 默认使用 esm 版本。 vue: vue/dist/vue.common.prod.js 在 vite2 中可以正常进行打包上线,…

民办生从零学C的第十二天:指针(1)

每日励志:拼搏十年,征战沙场,不忘初心,努力成为一个浑身充满铜臭味的有钱人。 一.内存和地址 1.内存 计算机内存是一系列存储单元的集合,每个存储单元都有唯一的地址来标识。这些存储单元用于存储程序的数据和指令。…

用Postman验证IAM Token的实际操作

当我们需要用Postman发送一个最简单的请求去验证Token的时候我们该怎么办? 【一、步骤】 步骤1:打开Postman,新建一个GET请求 请求地址填: https://iam.cn-north-4.myhuaweicloud.com/v3/auth/projects 解释一下:…

关于常量指针和指向常量的指针

关于指针,对于常量指针和指向常量的指针也是傻傻分不清。看到定义时,不知道是指针不能变,还是指针指向的内容不能变量。 先看形式: const char * A; char * const B; 这两种有什么区别?傻傻分不清。 A这种定义&am…

unity 读取csv

1.读取代码 string filePath Application.streamingAssetsPath "\\data.csv"; public List<MovieData> movieData new List<MovieData>(); private void ReadCSV(string filePath) { List<List<string>> data new List<…

安达发|高效智能塑料切割数控系统 - 全自动化软件解决方案

在当今的制造业中&#xff0c;塑料作为一种轻便、耐用且成本效益高的材料&#xff0c;被广泛应用于各个领域。随着科技的进步和市场需求的变化&#xff0c;塑料加工行业正面临着前所未有的挑战和机遇。为了提高生产效率&#xff0c;降低成本&#xff0c;并满足日益严格的质量标…

c#接口_抽象类_多态学习

c#接口_抽象类_多态学习 学习日志 关于&#xff1a;c#接口_抽象类_多态的学习记录。 一、概念 1. 多态&#xff08;Polymorphism&#xff09; 定义&#xff1a;同一操作作用于不同对象时&#xff0c;表现出不同的行为。实现方式&#xff1a; 继承 方法重写&#xff08;ov…

智能硬件行业售后服务管理:提升客户体验的关键所在

在当今数字化浪潮的推动下&#xff0c;智能硬件行业正以前所未有的速度蓬勃发展。从智能家居设备的普及&#xff0c;到智能穿戴产品的多样化&#xff0c;再到智能办公设备的广泛应用&#xff0c;智能硬件已经深入到我们生活的方方面面。据市场研究机构预测&#xff0c;未来几年…

Vue3 里 CSS 深度作用选择器 :deep()

&#x1f3af; 解释 在 Vue 组件里&#xff0c;CSS 默认是 scoped&#xff08;作用域限定的&#xff09;&#xff0c;只对当前组件生效。 如果你想在 scoped 样式里&#xff0c;穿透到子组件的内部元素&#xff0c;就要用 :deep()。 ✏️ 示例 比如&#xff0c;你有一个子组件…

仙宫云ComfyUI —【Wan2.1】AI视频生成部署

【Wan2.1】AI视频生成本地部署与使用技巧全面详解_哔哩哔哩_bilibili 所有模型下载&#xff1a;https://pan.quark.cn/s/9d793aa1b258 Runninghub本期课程工作流下载&#xff08;可获得1000RH币&#xff09;&#xff1a;https://www.runninghub.cn/?utm_sourcekol01-RH145 仙…

LabVIEW 在测控领域的深度开发与未来发展趋势研究报告 (2025-2030)(原创作品使用请注明出处,三连)

## LabVIEW 在测控领域的深度开发与未来发展趋势研究报告 (2025-2030) ### 引言 LabVIEW(Laboratory Virtual Instrument Engineering Workbench)自 1986 年由美国国家仪器公司(NI)发布以来,凭借其独特的图形化编程语言(G 语言)和强大的硬件集成能力,已成为全球工程师和…

政策支持与市场驱动:充电桩可持续发展的双轮引擎

随着全球能源转型加速&#xff0c;新能源汽车成为实现低碳交通的重要方向。然而&#xff0c;充电基础设施不足仍是制约其普及的关键瓶颈。当前&#xff0c;国际主流的充电桩运营模式包括政府推动、电网企业推动及汽车厂商推动三种模式&#xff0c;但单一模式均存在显著局限性。…

JVM——垃圾收集策略

GC的基本问题 什么是GC&#xff1f; GC 是 garbage collection 的缩写&#xff0c;意思是垃圾回收——把内存&#xff08;特别是堆内存&#xff09;中不再使用的空间释放掉&#xff1b;清理不再使用的对象。 为什么要GC&#xff1f; 堆内存是各个线程共享的空间&#xff0c…

用Java模拟打字:深入解析 java.awt.Robot 的键盘控制艺术

作为开发者&#xff0c;我们有时会遇到需要自动化用户界面交互的场景&#xff0c;比如自动化测试、脚本编写、或者制作一些辅助工具。而模拟键盘输入&#xff0c;尤其是“打字”&#xff0c;是这类自动化任务中非常基础且常见的一环。 在 Java 中&#xff0c;实现这一目标的利…

JavaScript 入门全讲解

JavaScript 入门全讲解 一、前言&#xff1a;为什么学习 JavaScript&#xff1f;二、JavaScript 简史与发展三、JavaScript 基础语法3.1 变量声明&#xff1a;var、let、const3.2 数据类型3.3 类型判断3.4 类型转换 四、运算符与表达式五、流程控制5.1 条件判断5.2 switch 语句…

python练习:求数字的阶乘

求数字的阶乘 eg:5的阶乘 54321 """ 求数字的阶乘 eg:5的阶乘 5*4*3*2*1 """count 1 for i in range(1,6):count count * iprint(count)运行结果&#xff1a;

传统农耕展陈如何突破?数字多媒体能否重构文化体验边界?

农耕文化是中华民族悠久历史的重要组成部分&#xff0c;它不仅承载着古代先民与自然和谐相处的智慧&#xff0c;也体现了人们对土地和自然的深厚情感。而今&#xff0c;如何有效地传承和展示这一传统文化&#xff0c;成为了一个重要的课题。今日&#xff0c;便让我们聚焦于农耕…

nginx代理websocket时ws遇到仅支持域名访问的处理

最终改造点 proxy_set_header Host 这一行 未改之前遇到的问题&#xff1a; nginx 日志显示 https://aaa.bbbb.cn:7413 被解析成了 IP 地址&#xff0c;这通常是因为 DNS 解析的结果被缓存或某些中间层&#xff08;如负载均衡器、防火墙等&#xff09;将域名替换为 IP 地址。…