<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          讓數(shù)據(jù)分析更簡(jiǎn)單的Panda技巧:萬(wàn)能轉(zhuǎn)格式、輕松合并、數(shù)據(jù)壓縮...

          共 3547字,需瀏覽 8分鐘

           ·

          2020-03-25 23:24

          作者:Roman Orac
          魚(yú)羊 編譯整理
          量子位 報(bào)道 | 公眾號(hào) QbitAI

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

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

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

          d8809d5652b423ba0ac60742f875686f.webp

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

          Pandas實(shí)用技巧

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

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

          DataFrame 轉(zhuǎn) HTML

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

          比如,我們先設(shè)定這樣一個(gè) 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,就可以將表格轉(zhuǎn)入 html 文件:


          df_html?=?df.to_html()
          with?open(‘a(chǎn)nalysis.html’,?‘w’)?as?f:?f.write(df_html)


          8b50cf7ea0cd175b715667d304469de0.webp

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

          DataFrame 轉(zhuǎn) LaTeX

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

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


          df.to_latex()


          394c49cf4ef9fa93b292c6e452058923.webp

          DataFrame 轉(zhuǎn) Markdown

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

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

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


          print(df.to_markdown())


          4479ead0de492746bcecfe72f2f7a943.webp

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

          DataFrame 轉(zhuǎn) Excel

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

          當(dāng)然是——


          df.to_excel(‘a(chǎn)nalysis.xlsx’)


          需要注意的是,如果你沒(méi)有安裝過(guò) xlwtopenpyxl 這兩個(gè)工具包,需要先安裝一下。

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

          DataFrame 轉(zhuǎn)字符串

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


          df.to_string()


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

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

          1、data_range

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

          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”,該函數(shù)就會(huì)分別返回按天、月、年遞增的日期。

          a018fb5bc41e46fb2b15009c154aacde.webp

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

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

          cfdf5667da03f8ffda80e8224ad6618e.webp

          和名為right的DataFrame:

          4dc4123cec67fb877557f8c1dd2c5293.webp

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

          f8eae94db42a36b8e04e85fc56f0eda2.webp

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


          df_merge?=?left.merge(right,?on?=?‘key’,?how?=?‘left’,?indicator?=?True)


          3、最近合并(Nearest merge)

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

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

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

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

          060ec50f7b5812dbc8ef30d3c3b79917.webp

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

          9cd3e24c91fc8fcf8d8cf09ceee7532c.webp

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

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


          pd.merge_asof(trades,?quotes,?on=”timestamp”,?by=’ticker’,?tolerance=pd.Timedelta(‘10ms’),?direction=‘backward’)


          01d7b58473ddeda5f5614ec7195030b8.webp

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

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


          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)


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


          #?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 庫(kù)

          57cea548c6545d5a64c74a657c6e43bd.webp

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

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

          先搞一個(gè) 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。

          dc7e3f3d42fa55690305db0b6d2f6ec8.webp

          gzip壓縮文件可以直接讀取:


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


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

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

          作者系網(wǎng)易新聞·網(wǎng)易號(hào)“各有態(tài)度”簽約作者


          好文章,我在看??

          瀏覽 34
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国内操逼网站 | 非洲一级婬片A片免费 | 日韩专区第一页。日韩中文字幕在线亚洲 | 五月天激情婷婷婷久久 | 青青草国产偷拍 |