數據分析(四):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.pswp.cn/diannao/80872.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80872.shtml
英文地址,請注明出處:http://en.pswp.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 地址。…