<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>

          不容錯過的Pandas小技巧:萬能轉(zhuǎn)格式、輕松合并、壓縮數(shù)據(jù),讓數(shù)據(jù)分析更高效

          共 4822字,需瀏覽 10分鐘

           ·

          2021-04-15 21:56

          來源:量子位

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

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

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

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

          Pandas實(shí)用技巧

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

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

          DataFrame 轉(zhuǎn) HTML

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

          比如,我們先設(shè)定這樣一個 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(010for _ in range(random.randint(35))] 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)

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

          DataFrame 轉(zhuǎn) LaTeX

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

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

          df.to_latex()

          DataFrame 轉(zhuǎn) Markdown

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

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

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

          print(df.to_markdown())

          注:這里還需要 tabulate 庫

          DataFrame 轉(zhuǎn) Excel

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

          當(dāng)然是——

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

          需要注意的是,如果你沒有安裝過 xlwtopenpyxl 這兩個工具包,需要先安裝一下。

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

          DataFrame 轉(zhuǎn)字符串

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

          df.to_string()

          5個鮮為人知的Pandas技巧

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

          1、data_range

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

          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ù)就會分別返回按天、月、年遞增的日期。

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

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

          和名為right的DataFrame:

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

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

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

          3、最近合并(Nearest merge)

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

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

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

          舉個例子,你有一個存儲報價信息的DataFrame。

          還有一個存儲交易信息的DataFrame。

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

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

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

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

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

          import numpy as np
          import pandas as pd

          df = pd.DataFrame(np.array([[123], [456], [789]]), 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, 1030],
              'values':     [sheet_name, 1131],
          })
          # 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、節(jié)省磁盤空間

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

          先搞一個 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壓縮文件可以直接讀?。?/p>

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

          這一份Pandas技巧筆記,暫且說到這里。

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

          大家好,最后給大家免費(fèi)分享 Python 三件套:《ThinkPython》、《簡明Python教程》、《Python進(jìn)階》的PDF電子版。如果你是剛?cè)腴T的小白,不用想了,這是最好的學(xué)習(xí)教材。


          現(xiàn)在免費(fèi)分享出來,有需要的讀者可以下載學(xué)習(xí),在下面的公眾號里回復(fù)關(guān)鍵字:三件套,就行。

          領(lǐng)取方式:

          長按下方掃碼,關(guān)注后發(fā)消息 [三件套]



          感謝你的分享,點(diǎn)贊,在看  

          瀏覽 53
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  成人性爱视频免费在线观看 | 一级黄色视频在线播放 | 神马午夜性爱 | 亚洲午夜无码久久久久蜜桃AV | 日本美女操逼免费看 |