不容錯過的Pandas小技巧:萬能轉格式、輕松合并、壓縮數據,讓數據分析更高效
作者:Roman Orac
魚羊 編譯整理
量子位 報道 | 公眾號 QbitAI
數據分析,如何能錯過?Pandas?。
現在,數據科學家 Roman Orac 分享了他在工作中相見恨晚的 Pandas 使用技巧。
了解了這些技巧,能讓你在學習、使用 Pandas 的時候更加高效。
話不多說,一起學習一下~
Pandas實用技巧
用 Pandas 做數據分析,最大的亮點當屬 DataFrame。不過,在展示成果的時候,常常需要把 DataFrame 轉成另一種格式。
Pandas 在這一點上其實十分友好,只需添加一行代碼。
DataFrame 轉 HTML
如果你需要用 HTML 發送自動報告,那么?to_html?函數了解一下。
比如,我們先設定這樣一個 DataFrame:
import?numpy?as?np
import?pandas?as?pd
import?random
n?=?10
df?=?pd.DataFrame(
????{
????????"col1":?np.random.random_sample(n),
????????"col2":?np.random.random_sample(n),
????????"col3":?[[random.randint(0,?10)?for?_?in?range(random.randint(3,?5))]?for?_?in?range(n)],
????}
)
用上 to_html,就可以將表格轉入 html 文件:
df_html?=?df.to_html()
with?open(‘analysis.html’,?‘w’)?as?f:?f.write(df_html)
與之配套的,是?read_html?函數,可以將 HTML 轉回 DataFrame。
DataFrame 轉 LaTeX
如果你還沒用過 LaTeX 寫論文,強烈建議嘗試一下。
要把 DataFrame 值轉成 LaTeX 表格,也是一個函數就搞定了:
df.to_latex()
DataFrame 轉 Markdown
如果你想把代碼放到 GitHub 上,需要寫個 README。
這時候,你可能需要把 DataFrame 轉成 Markdown 格式。
Pandas 同樣為你考慮到了這一點:
print(df.to_markdown())
注:這里還需要 tabulate 庫
DataFrame 轉 Excel
說到這里,給同學們提一個小問題:導師/老板/客戶要你提供 Excel 格式的數據,你該怎么做?
當然是——
df.to_excel(‘analysis.xlsx’)
需要注意的是,如果你沒有安裝過?xlwt?和?openpyxl?這兩個工具包,需要先安裝一下。
另外,跟 HTML 一樣,這里也有一個配套函數:read_excel,用來將excel數據導入pandas DataFrame。
DataFrame 轉字符串
轉成字符串,當然也沒問題:
df.to_string()
5個鮮為人知的Pandas技巧
此前,Roman Orac 還曾分享過 5 個他覺得十分好用,但大家可能沒有那么熟悉的 Pandas 技巧。
1、data_range
從外部 API 或數據庫獲取數據時,需要多次指定時間范圍。
Pandas 的 data_range 覆蓋了這一需求。
import?pandas?as?pd
date_from?=?“2019-01-01”
date_to?=?“2019-01-12”
date_range?=?pd.date_range(date_from,?date_to,?freq=”D”)
print(date_range)
freq = “D”/“M”/“Y”,該函數就會分別返回按天、月、年遞增的日期。
2、合并數據
當你有一個名為left的DataFrame:
和名為right的DataFrame:
想通過關鍵字“key”把它們整合到一起:
實現的代碼是:
df_merge?=?left.merge(right,?on?=?‘key’,?how?=?‘left’,?indicator?=?True)
3、最近合并(Nearest merge)
在處理股票或者加密貨幣這樣的財務數據時,價格會隨著實際交易變化。
針對這樣的數據,Pandas提供了一個好用的功能,merge_asof。
該功能可以通過最近的key(比如時間戳)合并DataFrame。
舉個例子,你有一個存儲報價信息的DataFrame。
還有一個存儲交易信息的DataFrame。
現在,你需要把兩個DataFrame中對應的信息合并起來。
最新報價和交易之間可能有10毫秒的延遲,或者沒有報價,在進行合并時,就可以用上 merge_asof。
pd.merge_asof(trades,?quotes,?on=”timestamp”,?by=’ticker’,?tolerance=pd.Timedelta(‘10ms’),?direction=‘backward’)
4、創建Excel報告
在Pandas中,可以直接用DataFrame創建Excel報告。
import?numpy?as?np
import?pandas?as?pd
df?=?pd.DataFrame(np.array([[1,?2,?3],?[4,?5,?6],?[7,?8,?9]]),?columns=["a",?"b",?"c"])
report_name?=?'example_report.xlsx'
sheet_name?=?'Sheet1'
writer?=?pd.ExcelWriter(report_name,?engine='xlsxwriter')
df.to_excel(writer,?sheet_name=sheet_name,?index=False)
不只是數據,還可以添加圖表。
#?define?the?workbook
workbook?=?writer.book
worksheet?=?writer.sheets[sheet_name]
#?create?a?chart?line?object
chart?=?workbook.add_chart({'type':?'line'})
#?configure?the?series?of?the?chart?from?the?spreadsheet
#?using?a?list?of?values?instead?of?category/value?formulas:
#?????[sheetname,?first_row,?first_col,?last_row,?last_col]
chart.add_series({
????'categories':?[sheet_name,?1,?0,?3,?0],
????'values':?????[sheet_name,?1,?1,?3,?1],
})
#?configure?the?chart?axes
chart.set_x_axis({'name':?'Index',?'position_axis':?'on_tick'})
chart.set_y_axis({'name':?'Value',?'major_gridlines':?{'visible':?False}})
#?place?the?chart?on?the?worksheet
worksheet.insert_chart('E2',?chart)
#?output?the?excel?file
writer.save()
注:這里需要 XlsxWriter 庫
5、節省磁盤空間
Pandas在保存數據集時,可以對其進行壓縮,其后以壓縮格式進行讀取。
先搞一個 300MB 的 DataFrame,把它存成 csv。
df?=?pd.DataFrame(pd.np.random.randn(50000,300))
df.to_csv(‘random_data.csv’,?index=False)
壓縮一下試試:
df.to_csv(‘random_data.gz’,?compression=’gzip’,?index=False)
文件就變成了136MB。
gzip壓縮文件可以直接讀取:
df?=?pd.read_csv(‘random_data.gz’)
這一份Pandas技巧筆記,暫且說到這里。各位同學都做好筆記了嗎?
Talk is cheap, show me the code。學會了,就用起來吧
— 完 —
- 蘋果芯片主管也要跑路!庫克被曝出現健康問題2025-12-07
- 世界模型和具身大腦最新突破:90%生成數據,VLA性能暴漲300%|開源2025-12-02
- 谷歌新架構突破Transformer超長上下文瓶頸!Hinton靈魂拷問:后悔Open嗎?2025-12-05
- 90后華人副教授突破30年數學猜想!結論與生成式AI直接相關2025-11-26



