日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Pandas 文件读取和导出

發布時間:2025/3/11 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pandas 文件读取和导出 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Pandas 文件讀取和導出

更新時間:2020-12-28 00:16:20標簽:pandas?io

說明

Pandas 中文教程修訂中,歡迎加微信 sinbam 提供建議、糾錯、催更。查看更新日志

我們拿到的數據一般是 CSV、Excel 等格式,將文件加載到 Pandas 的 DataFrame 對象,我們就可以用它的方法進行處理了。在處理結束后,我們也需要將文件導出 Excel 等格式,方便查看。

?

本頁介紹最常用的文件格式和最基本的用法,如有必要會專題介紹更加詳細的功能。

功能列表

下邊是我們經常使用的方法:

格式文件格式讀取函數寫入(輸出)函數
binaryExcelread_excelto_excel
textCSVread_csv?read_tableto_csv
textJSONread_jsonto_json
text網頁表格 HTMLread_htmlto_html
text剪貼板read_clipboardto_clipboard
SQLSQLread_sqlto_sql
textMarkdown?to_markdown

讀取更多類型文件可查看官網文檔。

其中:

  • 讀取函數一般會賦值給一個變量?df,?df = pd.read_<xxx>()
  • 輸出函數是將變量自身進行操作并輸出?df.to_<xxx>()

CSV

從 CSV 文件中讀取數據并加載到 DataFrame:

文件

# 文件目錄 pd.read_csv('data.csv') # 如果文件與代碼文件在同目錄下 pd.read_csv('data/my/data.csv') # 指定目錄 pd.read_csv('data/my/my.data') # CSV 文件擴展名不一定是 csv # 使用網址 url pd.read_csv('https://www.gairuo.com/file/data/dataset/GDP-China.csv')# 也可以從 StringIO 中讀取 from io import StringIO data = ('col1,col2,col3\n''a,b,1\n''a,b,2\n''c,d,3') pd.read_csv(StringIO(data))

注:csv 文件擴展名不一定是?.csv

指定分隔符號

# 數據分隔轉化是逗號, 如果是其他可以指定 pd.read_csv(data, sep='\t') # 制表符分隔 tab pd.read_table(data) # read_table 默認是制表符分隔 tab

列、索引、名稱

# 默認第一行是表頭,可以指定,如果指定列名會被忽略 pd.read_csv(data, header=0) pd.read_csv(data, header=None) # 沒有表頭 pd.read_csv(data, names=['列1', '列2']) # 指定列名列表 # 如沒列名,自動指定一個: 前綴加序數 pd.read_csv(data, prefix='c_', header=None)# 讀取部分列 pd.read_csv(data, usecols=[0,4,3]) # 按索引只讀取指定列,順序無關 pd.read_csv(data, usecols=['列1', '列5']) # 按索引只讀取指定列# 指定列順序,其實是 df 的篩選功能 pd.read_csv(data, usecols=['列1', '列5'])[['列5', '列1']] pd.read_csv(data, index_col=0) # 第幾列是索引 # 以下用 callable 方式可以巧妙指定順序, in 后邊的是我們要的順序 pd.read_csv(data, usecols=lambda x: x.upper() in ['COL3', 'COL1'])

數據類型

data = 'https://www.gairuo.com/file/data/dataset/GDP-China.csv' # 指定數據類型 pd.read_csv(data, dtype=np.float64) # 所有數據均為此數據類型 pd.read_csv(data, dtype={'c1':np.float64, 'c2': str}) # 指定字段的類型# 解析日期時間 pd.read_csv(data, parse_dates=True) # 自動解析日期時間格式 pd.read_csv(data, parse_dates=['年份']) # 指定日期時間字段進行解析 # 將 1、4 列合并解析成名為 時間的 時間類型列 pd.read_csv(data, parse_dates={'時間':[1,4]}) # 指定時間解析庫,默認是 dateutil.parser.parser pd.read_csv(data, date_parser=pd.io.date_converters.parse_date_time) date_parser=lambda x: pd.to_datetime(x, utc=True, format=...)

更多功能可參考?pandas.read_csv 詳細使用。

導出文件

df.to_csv('done.csv') df.to_csv('data/done.csv') # 可以指定文件目錄路徑 df.to_csv('done.csv', index=False) # 不要索引 # 導出二進制文件句柄(緩沖), 支持編碼和壓縮 pandas 1.2.0 增加 import io buffer = io.BytesIO() df.to_csv(buffer, encoding="utf-8", compression="gzip")

Excel 文件

read_excel() 方法可以使用 xlrd Python 模塊(可能需要安裝,下同)讀取 Excel 2003(.xls)文件。 可以使用 xlrd 或 openpyxl 讀取Excel 2007+(.xlsx)文件。 可以使用 pyxlsb 讀取二進制Excel(.xlsb)文件。 to_excel() 實例方法用于將DataFrame 保存到Excel。 大多數用法類似于 csv,包括文件的讀取和保存。

xlsx = pd.ExcelFile('data.xlsx') df = pd.read_excel(xlsx, 'Sheet1') # 讀取 xlsx.parse('sheet1') # 取指定標簽為 DataFrame # Excel 的所有標簽 xlsx.sheet_names # ['sheet1', 'sheet2', 'sheet3', 'sheet4']

文件讀取

# Returns a DataFrame pd.read_excel('team.xlsx') # 默認讀取第一個標簽頁 Sheet pd.read_excel('path_to_file.xls', sheet_name='Sheet1') # 指定 Sheet # 從網址 url 讀取 pd.read_excel('https://www.gairuo.com/file/data/dataset/team.xlsx') # !!! 讀取的功能基本與 read_csv 一樣,可參考上文 # 不指定索引,不指定表頭,使用自動行列索引 pd.read_excel('tmp.xlsx', index_col=None, header=None) # 指定列的數據類型 pd.read_excel('tmp.xlsx', index_col=0,dtype={'Name': str, 'Value': float})

多個 Sheet 的讀取:

pd.read_excel('path_to_file.xls', sheet_name=['Sheet1', 'Sheet2'])

ExcelFile 對象:

# 使用 ExcelFile 保存文件對象 xlsx = pd.ExcelFile('path_to_file.xls') df = pd.read_excel(xlsx, 'Sheet1')# 可以把多個 Sheet 存入 ExcelFile with pd.ExcelFile('path_to_file.xls') as xls:df1 = pd.read_excel(xls, 'Sheet1')df2 = pd.read_excel(xls, 'Sheet2') df = pd.read_excel(xlsx)

常用的參數使用與?read_csv?相同。

導出 excel

df.to_excel('path_to_file.xlsx') # 指定 sheet 名, 不要索引 df.to_excel('path_to_file.xlsx', sheet_name='Sheet1', index=False) # 指定索引名,不合并單元格 df.to_excel('path_to_file.xlsx', index_label='label', merge_cells=False) # 將多個 df 分不同 sheet 導入到一個 excel with pd.ExcelWriter('path_to_file.xlsx') as writer:df1.to_excel(writer, sheet_name='Sheet1')df2.to_excel(writer, sheet_name='Sheet2')# 指定操作引擎 df.to_excel('path_to_file.xlsx', sheet_name='Sheet1', engine='xlsxwriter') # By setting the 'engine' in the ExcelWriter constructor. writer = pd.ExcelWriter('path_to_file.xlsx', engine='xlsxwriter') df.to_excel(writer) writer.save()# 設置系統引擎 from pandas import options # noqa: E402 options.io.excel.xlsx.writer = 'xlsxwriter' df.to_excel('path_to_file.xlsx', sheet_name='Sheet1')

JSON 格式

Pandas 可以讀取和生成 Json 字符串,Series 或 DataFrame 都可以被轉換。JSON 格式在網絡上非常通用,在寫爬蟲時可以使用極大提高效率,在做可視化時前端的 JS 庫往往需要接受 Json 格式。

讀取 JSON

pd.read_json('data.json') json = '''{"columns":["col 1","col 2"], "index":["row 1","row 2"], "data":[["a","b"],["c","d"]]} ''' pd.read_json(json) pd.read_json(json, orient='split') # json 格式 ''' orient 支持: - 'split' : dict like {index -> [index], columns -> [columns], data -> [values]} - 'records' : list like [{column -> value}, ... , {column -> value}] - 'index' : dict like {index -> {column -> value}} - 'columns' : dict like {column -> {index -> value}} '''

輸出 JSON

Series 或 DataFrame 轉換 JSON 的機制如下:

  • Series :

    • 默認為 index
    • 支持 {split, records, index}
  • DataFrame

    • 默認為 columns
    • 支持 {split, records, index, columns, values, table}
df = pd.DataFrame([['a', 'b'], ['c', 'd']],index=['row 1', 'row 2'],columns=['col 1', 'col 2']) # 輸出 json 字符串 df.to_json(orient='split')

HTML

read_html() 函數可以接受 HTML字符串 / html文件 / URL,并將HTML表解析為DataFrame。返回的是一個 df 列表,可以通知索引取第幾個。

僅解析網頁內?<table>?標簽里的數據。

dfs = pd.read_html('https://www.gairuo.com/p/pandas-io') dfs[0] # 查看第一個 df # 讀取網頁文件,第一行為表頭 dfs = pd.read_html('data.html', header=0) # 第一列為索引 dfs = pd.read_html(url, index_col=0) # !!! 常用的功能與 read_csv 相同,可參考上文

如果一個網頁表格很多,可以指定元素來取得:

# id='table' 的表格,注意這兒仍然可能返回多個 dfs1 = pd.read_html(url, attrs={'id': 'table'}) # dfs1[0] # class='sortable' dfs2 = pd.read_html(url, attrs={'class': 'sortable'})

常用的參數使用與?read_csv?相同。

輸出 html

會輸出 html 表格代碼字符串。

print(df.to_html()) print(df.to_html(columns=[0])) # 輸出指定列 print(df.to_html(bold_rows=False)) # 表頭不加粗體 # 表格指定樣式,支持多個 print(df.to_html(classes=['class1', 'class2']))

剪貼板 Clipboard

剪貼板(Clipboard)是操作系統級的一個暫存數據的地方,它存在內存中,可以在不同軟件之間傳遞,非常方便。pandas 支持讀取剪貼板中的結構化數據,這就意味著我們不用將數據保存成文件,直接從網頁、文件中復制,然后中直接讀取,非常方便。

讀取剪貼板,它的參數使用與?read_csv?完全一樣:

'''A B C x 1 4 p y 2 5 q z 3 6 r ''' # 復制上邊的數據,然后直接賦值 cdf = pd.read_clipboard()

保存到剪貼板:

# 執行完找個地方粘貼一下看看效果 df = pd.DataFrame({'A': [1, 2, 3],'B': [4, 5, 6],'C': ['p', 'q', 'r']},index=['x', 'y', 'z']) df.to_clipboard()

SQL

Pandas 支持連接數據庫進行查詢,有以下幾個方法:

  • read_sql_table(table_name, con[, schema, …]), 把數據表里的數據轉成 DataFrame
  • read_sql_query(sql, con[, index_col, …]), 用 sql 查詢數據到 DataFrame
  • read_sql(sql, con[, index_col, …]), 同時支持上邊兩個功能
  • DataFrame.to_sql(self, name, con[, schema, …]),把記錄數據寫到數據庫里
# 需要安裝 sqlalchemy 庫 from sqlalchemy import create_engine # 創建數據庫對象,sqlite 內存模式 engine = create_engine('sqlite:///:memory:') # 把表名為 data 的表數據拿出來 with engine.connect() as conn, conn.begin():data = pd.read_sql_table('data', conn)# data # 將數據寫入 data.to_sql('data', engine) # 大量寫入 data.to_sql('data_chunked', engine, chunksize=1000) # 使用 sql 查詢 pd.read_sql_query('SELECT * FROM data', engine)

輸出 Markdown

Markdown?是一種常用的技術文檔編寫語言,Pandas 支持輸出 Markdown 格式字符串:

print(df.to_markdown()) ''' | | A | B | C | |:---|----:|----:|:----| | x | 1 | 4 | p | | y | 2 | 5 | q | | z | 3 | 6 | r | '''# 不需要索引 print(df.to_markdown(index=False)) # 填充空值 print(df.fillna('').to_markdown(index=False))

總結

以上是生活随笔為你收集整理的Pandas 文件读取和导出的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。