自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Pandas還能這么玩?花式導(dǎo)數(shù)據(jù)、合并、壓縮,數(shù)據(jù)分析更高效

大數(shù)據(jù)
數(shù)據(jù)分析,如何能錯(cuò)過 Pandas ?,F(xiàn)在,數(shù)據(jù)科學(xué)家 Roman Orac 分享了他在工作中相見恨晚的 Pandas 使用技巧。

數(shù)據(jù)分析,如何能錯(cuò)過 Pandas 。

現(xiàn)在,數(shù)據(jù)科學(xué)家 Roman Orac 分享了他在工作中相見恨晚的 Pandas 使用技巧。

了解了這些技巧,能讓你在學(xué)習(xí)、使用 Pandas 的時(shí)候更加高效。 

[[319209]]

話不多說,一起學(xué)習(xí)一下~

Pandas實(shí)用技巧

用 Pandas 做數(shù)據(jù)分析,最大的亮點(diǎn)當(dāng)屬 DataFrame。不過,在展示成果的時(shí)候,常常需要把 DataFrame 轉(zhuǎn)成另一種格式。

Pandas 在這一點(diǎn)上其實(shí)十分友好,只需添加一行代碼。

DataFrame 轉(zhuǎn) HTML

如果你需要用 HTML 發(fā)送自動(dòng)報(bào)告,那么 to_html 函數(shù)了解一下。

比如,我們先設(shè)定這樣一個(gè) DataFrame:

  1. import numpy as np 
  2. import pandas as pd 
  3. import random 
  4.  
  5. n = 10 
  6. df = pd.DataFrame( 
  7.     { 
  8.         "col1": np.random.random_sample(n), 
  9.         "col2": np.random.random_sample(n), 
  10.         "col3": [[random.randint(0, 10) for _ in range(random.randint(3, 5))] for _ in range(n)], 
  11.     } 

用上 to_html,就可以將表格轉(zhuǎn)入 html 文件:

  1. df_html = df.to_html() 
  2. with open(‘analysis.html’, ‘w’) as f: f.write(df_html)  
Pandas還能這么玩?花式導(dǎo)數(shù)據(jù)、合并、壓縮,數(shù)據(jù)分析更高效

與之配套的,是 read_html 函數(shù),可以將 HTML 轉(zhuǎn)回 DataFrame。

DataFrame 轉(zhuǎn) LaTeX

如果你還沒用過 LaTeX 寫論文,強(qiáng)烈建議嘗試一下。

要把 DataFrame 值轉(zhuǎn)成 LaTeX 表格,也是一個(gè)函數(shù)就搞定了:

  1. df.to_latex()  
Pandas還能這么玩?花式導(dǎo)數(shù)據(jù)、合并、壓縮,數(shù)據(jù)分析更高效

DataFrame 轉(zhuǎn) Markdown

如果你想把代碼放到 GitHub 上,需要寫個(gè) README。

這時(shí)候,你可能需要把 DataFrame 轉(zhuǎn)成 Markdown 格式。

Pandas 同樣為你考慮到了這一點(diǎn):

  1. print(df.to_markdown())  
Pandas還能這么玩?花式導(dǎo)數(shù)據(jù)、合并、壓縮,數(shù)據(jù)分析更高效

注:這里還需要 tabulate 庫(kù)

DataFrame 轉(zhuǎn) Excel

說到這里,給同學(xué)們提一個(gè)小問題:導(dǎo)師/老板/客戶要你提供 Excel 格式的數(shù)據(jù),你該怎么做?

當(dāng)然是——

  1. df.to_excel(‘analysis.xlsx’) 

需要注意的是,如果你沒有安裝過 xlwt 和 openpyxl 這兩個(gè)工具包,需要先安裝一下。

另外,跟 HTML 一樣,這里也有一個(gè)配套函數(shù):read_excel,用來將excel數(shù)據(jù)導(dǎo)入pandas DataFrame。

DataFrame 轉(zhuǎn)字符串

轉(zhuǎn)成字符串,當(dāng)然也沒問題:

  1. df.to_string() 

5個(gè)鮮為人知的Pandas技巧

此前,Roman Orac 還曾分享過 5 個(gè)他覺得十分好用,但大家可能沒有那么熟悉的 Pandas 技巧。

1、data_range

從外部 API 或數(shù)據(jù)庫(kù)獲取數(shù)據(jù)時(shí),需要多次指定時(shí)間范圍。

Pandas 的 data_range 覆蓋了這一需求。

  1. import pandas as pd 
  2. date_from = “2019-01-01” 
  3. date_to = “2019-01-12” 
  4. date_range = pd.date_range(date_from, date_to, freq=”D”) 
  5. print(date_range) 

freq = “D”/“M”/“Y”,該函數(shù)就會(huì)分別返回按天、月、年遞增的日期。 

Pandas還能這么玩?花式導(dǎo)數(shù)據(jù)、合并、壓縮,數(shù)據(jù)分析更高效

2、合并數(shù)據(jù)

當(dāng)你有一個(gè)名為left的DataFrame: 

Pandas還能這么玩?花式導(dǎo)數(shù)據(jù)、合并、壓縮,數(shù)據(jù)分析更高效

和名為right的DataFrame: 

Pandas還能這么玩?花式導(dǎo)數(shù)據(jù)、合并、壓縮,數(shù)據(jù)分析更高效

想通過關(guān)鍵字“key”把它們整合到一起: 

Pandas還能這么玩?花式導(dǎo)數(shù)據(jù)、合并、壓縮,數(shù)據(jù)分析更高效

實(shí)現(xiàn)的代碼是:

  1. df_merge = left.merge(righton = ‘key’, how = ‘left’, indicator = True

3、最近合并(Nearest merge)

在處理股票或者加密貨幣這樣的財(cái)務(wù)數(shù)據(jù)時(shí),價(jià)格會(huì)隨著實(shí)際交易變化。

針對(duì)這樣的數(shù)據(jù),Pandas提供了一個(gè)好用的功能,merge_asof。

該功能可以通過最近的key(比如時(shí)間戳)合并DataFrame。

舉個(gè)例子,你有一個(gè)存儲(chǔ)報(bào)價(jià)信息的DataFrame。 

Pandas還能這么玩?花式導(dǎo)數(shù)據(jù)、合并、壓縮,數(shù)據(jù)分析更高效

還有一個(gè)存儲(chǔ)交易信息的DataFrame。 

Pandas還能這么玩?花式導(dǎo)數(shù)據(jù)、合并、壓縮,數(shù)據(jù)分析更高效

現(xiàn)在,你需要把兩個(gè)DataFrame中對(duì)應(yīng)的信息合并起來。

最新報(bào)價(jià)和交易之間可能有10毫秒的延遲,或者沒有報(bào)價(jià),在進(jìn)行合并時(shí),就可以用上 merge_asof。

  1. pd.merge_asof(trades, quotes, on=”timestamp”, by=’ticker’, tolerance=pd.Timedelta(‘10ms’), direction=‘backward’)  
Pandas還能這么玩?花式導(dǎo)數(shù)據(jù)、合并、壓縮,數(shù)據(jù)分析更高效

4、創(chuàng)建Excel報(bào)告

在Pandas中,可以直接用DataFrame創(chuàng)建Excel報(bào)告。

  1. import numpy as np 
  2. import pandas as pd 
  3.  
  4. df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=["a""b""c"]) 
  5.  
  6. report_name = 'example_report.xlsx' 
  7. sheet_name = 'Sheet1' 
  8. writer = pd.ExcelWriter(report_name, engine='xlsxwriter'
  9. df.to_excel(writer, sheet_name=sheet_name, index=False

不只是數(shù)據(jù),還可以添加圖表。

  1. # define the workbook 
  2. workbook = writer.book 
  3. worksheet = writer.sheets[sheet_name] 
  4. create a chart line object 
  5. chart = workbook.add_chart({'type''line'}) 
  6. # configure the series of the chart from the spreadsheet 
  7. # using a list of values instead of category/value formulas: 
  8. #     [sheetname, first_row, first_col, last_row, last_col] 
  9. chart.add_series({ 
  10.     'categories': [sheet_name, 1, 0, 3, 0], 
  11.     'values':     [sheet_name, 1, 1, 3, 1], 
  12. }) 
  13. # configure the chart axes 
  14. chart.set_x_axis({'name''Index''position_axis''on_tick'}) 
  15. chart.set_y_axis({'name''Value''major_gridlines': {'visible'False}}) 
  16. # place the chart on the worksheet 
  17. worksheet.insert_chart('E2', chart) 
  18. output the excel file 
  19. writer.save() 

注:這里需要 XlsxWriter 庫(kù) 

Pandas還能這么玩?花式導(dǎo)數(shù)據(jù)、合并、壓縮,數(shù)據(jù)分析更高效

5、節(jié)省磁盤空間

Pandas在保存數(shù)據(jù)集時(shí),可以對(duì)其進(jìn)行壓縮,其后以壓縮格式進(jìn)行讀取。

先搞一個(gè) 300MB 的 DataFrame,把它存成 csv。

  1. df = pd.DataFrame(pd.np.random.randn(50000,300)) 
  2. df.to_csv(‘random_data.csv’, index=False

壓縮一下試試:

  1. df.to_csv(‘random_data.gz’, compression=’gzip’, index=False

文件就變成了136MB。 

Pandas還能這么玩?花式導(dǎo)數(shù)據(jù)、合并、壓縮,數(shù)據(jù)分析更高效

gzip壓縮文件可以直接讀?。?/p>

  1. df = pd.read_csv(‘random_data.gz’) 

這一份Pandas技巧筆記,暫且說到這里。各位同學(xué)都做好筆記了嗎?

Talk is cheap, show me the code。學(xué)會(huì)了,就用起來吧

 

責(zé)任編輯:未麗燕 來源: 量子位
相關(guān)推薦

2023-11-21 16:02:56

2022-07-08 06:01:37

D-Tale輔助工具

2021-12-24 10:45:19

PandasLambda數(shù)據(jù)分析

2021-04-01 05:40:53

分庫(kù)分表數(shù)據(jù)庫(kù)MySQL

2022-10-31 08:47:21

人臉識(shí)別按鍵鍵盤

2020-05-09 16:45:56

ping命令Linux

2021-07-07 09:50:23

NumpyPandasPython

2023-04-17 07:34:17

電商平臺(tái)ChatGPT表格

2020-05-12 10:44:19

數(shù)據(jù)分析師薪資數(shù)據(jù)

2024-10-28 07:10:00

scroll標(biāo)記前端網(wǎng)格布局

2024-03-25 08:03:32

技術(shù)面試ShowMeBug協(xié)同編程

2024-01-09 13:58:22

PandasPython數(shù)據(jù)分析

2025-04-16 08:10:00

PandasPython數(shù)據(jù)分析

2022-11-11 11:35:14

2016-03-21 11:09:52

Tableau/大數(shù)據(jù)

2017-12-21 14:36:10

大數(shù)據(jù)健身智慧

2022-04-02 06:20:48

IT領(lǐng)導(dǎo)者數(shù)據(jù)分析團(tuán)隊(duì)

2020-06-05 14:29:07

PythonPandas數(shù)據(jù)分析

2019-11-04 15:00:01

DatatableR語(yǔ)言數(shù)據(jù)科學(xué)

2017-09-01 09:52:20

PythonPandas數(shù)據(jù)分析
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)