整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          不容錯過的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’)

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

          另外,跟 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。學會了,就用起來吧

          — 完 —

          量子位 QbitAI · 頭條號簽約

          關注我們,第一時間獲知前沿科技動態

          字符串(String)、數字(Number)、布爾(Boolean)、數組(Array)、對象(Object)、空(Null)、未定義(Undefined)。

          JavaScript 擁有動態類型

          JavaScript 擁有動態類型。這意味著相同的變量可用作不同的類型:

          實例

          var x; // x 為 undefined

          var x = 5; // 現在 x 為數字

          var x = "John"; // 現在 x 為字符串

          JavaScript 字符串

          字符串是存儲字符(比如 "Bill Gates")的變量。

          字符串可以是引號中的任意文本。您可以使用單引號或雙引號:

          實例

          var carname="Volvo XC60";

          var carname='Volvo XC60';

          您可以在字符串中使用引號,只要不匹配包圍字符串的引號即可:

          實例

          var answer="It's alright";

          var answer="He is called 'Johnny'";

          var answer='He is called "Johnny"';

          JavaScript 數字

          JavaScript 只有一種數字類型。數字可以帶小數點,也可以不帶:

          實例

          var x1=34.00; //使用小數點來寫

          var x2=34; // //不使用小數點來寫

          極大或極小的數字可以通過科學(指數)計數法來書寫:

          實例

          var y=123e5; // 12300000

          var z=123e-5; // 0.00123

          JavaScript 布爾

          布爾(邏輯)只能有兩個值:true 或 false。

          var x=true;

          var y=false;

          布爾常用在條件測試中。您將在本教程稍后的章節中學到更多關于條件測試的知識。

          JavaScript 數組

          下面的代碼創建名為 cars 的數組:

          var cars=new Array();

          cars[0]="Saab";

          cars[1]="Volvo";

          cars[2]="BMW";

          或者 (condensed array):

          var cars=new Array("Saab","Volvo","BMW");

          或者 (literal array):

          實例

          var cars=["Saab","Volvo","BMW"];

          數組下標是基于零的,所以第一個項目是 [0],第二個是 [1],以此類推。

          JavaScript 對象

          對象由花括號分隔。在括號內部,對象的屬性以名稱和值對的形式 (name : value) 來定義。屬性由逗號分隔:

          var person={firstname:"John", lastname:"Doe", id:5566};

          上面例子中的對象 (person) 有三個屬性:firstname、lastname 以及 id。

          空格和折行無關緊要。聲明可橫跨多行:

          var person={

          firstname : "John",

          lastname : "Doe",

          id : 5566

          };

          對象屬性有兩種尋址方式:

          實例

          name=person.lastname;

          name=person["lastname"];

          Undefined 和 Null

          Undefined 這個值表示變量不含有值。

          可以通過將變量的值設置為 null 來清空變量。

          實例

          cars=null;

          person=null;

          聲明變量類型

          當您聲明新變量時,可以使用關鍵詞 "new" 來聲明其類型:

          var carname=new String;

          var x= new Number;

          var y= new Boolean;

          var cars= new Array;

          var person= new Object;

          JavaScript 變量均為對象。當您聲明一個變量時,就創建了一個新的對象。

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!

          件是 Web 開發的方向,現在的熱點是 JavaScript 組件,但是 HTML 組件未來可能更有希望。 本文就介紹 HTML 組件的基礎知識:自定義元素(custom elements)。

          一、瀏覽器處理

          我們一般都使用標準的 HTML 元素。

          <p>Hello World</p>
          

          上面代碼中,<p>就是標準的 HTML 元素。

          如果使用非標準的自定義元素,會有什么結果?

          <greeting>Hello World</greeting>
          

          上面代碼中,<greeting>就是非標準元素,瀏覽器不認識它。這段代碼的運行結果是,瀏覽器照常顯示Hello World,這說明瀏覽器并沒有過濾這個元素。

          現在,為自定義元素加上樣式。

          greeting {
           display: block;
           font-size: 36px;
           color: red;
          }
          

          運行結果如下。

          接著,使用腳本操作這個元素。

          function customTag(tagName, fn){
           Array
           .from(document.getElementsByTagName(tagName))
           .forEach(fn);
          }
          function greetingHandler(element) {
           element.innerHTML = '你好,世界';
          } 
          customTag('greeting', greetingHandler);
          

          運行結果如下。

          這說明,瀏覽器對待自定義元素,就像對待標準元素一樣,只是沒有默認的樣式和行為。這種處理方式是寫入 HTML5 標準的。

          “User agents must treat elements and attributes that they do not understand as semantically neutral; leaving them in the DOM (for DOM processors), and styling them according to CSS (for CSS processors), but not inferring any meaning from them.”

          上面這段話的意思是,瀏覽器必須將自定義元素保留在 DOM 之中,但不會任何語義。除此之外,自定義元素與標準元素都一致。

          事實上,瀏覽器提供了一個HTMLUnknownElement對象,所有自定義元素都是該對象的實例。

          var tabs = document.createElement('tabs');
          tabs instanceof HTMLUnknownElement // true
          tabs instanceof HTMLElement // true
          

          上面代碼中,tabs是一個自定義元素,同時繼承了HTMLUnknownElement和HTMLElement接口。

          獲取方式:

          1.在你手機的右上角有【關注】選項,或點擊我的頭像,點擊關注!(關注我)

          2.關注后,手機客戶端點擊我的主頁面,右上角有私信,請私信發我:編程

          電腦已經設置好了關鍵詞自動回復,自動領取就好了!這幾天上萬個消息,真的回復不過來,所以回復的時候請注意關鍵詞!

          其實做為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要這里請私信我“編程”不管你是小白還是大牛歡迎入住大家一起交流成長。小編會在里面不定期分享干貨源碼,包括我精心整理的一份零基礎教程。歡迎各位感興趣的的小伙伴。

          學習思路:


          二、HTML import

          有了自定義元素,就可以寫出語義性非常好的 HTML 代碼。

          <share-buttons>
           <social-button type="weibo">
           <a href="...">微博</a>
           </social-button>
           <social-button type="weixin">
           <a href="...">微信</a>
           </social-button>
          </share-buttons>
          

          上面的代碼,一眼就能看出語義。

          如果將<share-buttons>元素的樣式與腳本,封裝在一個 HTML 文件share-buttons.html之中,這個元素就可以復用了。

          使用的時候,先引入share-buttons.html。

          <link rel="import" href="share-buttons.html">
          

          然后,就可以在網頁中使用<share-buttons>了。

          <article>
           <h1>Title</h1>
           <share-buttons/>
           ... ...
          </article>
          

          HTML imports 的更多用法可以參考教程(1,2)。目前只有 Chrome 瀏覽器支持這個語法。


          三、Custom Elements 標準

          HTML5 標準規定了自定義元素是合法的。然后,W3C 就為自定義元素制定了一個單獨的 Custom Elements 標準。

          它與其他三個標準放在一起—- HTML Imports,HTML Template、Shadow DOM—-統稱為 Web Components 規范。目前,這個規范只有 Chrome 瀏覽器支持。

          Custom Elements 標準對自定義元素的名字做了限制。

          “自定義元素的名字必須包含一個破折號(-)所以<x-tags>、<my-element>和<my-awesome-app>都是正確的名字,而<tabs>和<foo_bar>是不正確的。這樣的限制使得 HTML 解析器可以分辨那些是標準元素,哪些是自定義元素。”

          注意,一旦名字之中使用了破折號,自定義元素就不是HTMLUnknownElement的實例了。

          var xTabs = document.createElement('x-tabs');
          xTabs instanceof HTMLUnknownElement // false
          xTabs instanceof HTMLElement // true
          

          Custom Elements 標準規定了,自定義元素的定義可以使用 ES6 的class語法。

          // 定義一個 <my-element></my-element>
          class MyElement extends HTMLElement {...}
          window.customElements.define('my-element', MyElement);
          

          上面代碼中,原生的window.customElements對象的define方法用來定義 Custom Element。該方法接受兩個參數,第一個參數是自定義元素的名字,第二個參數是一個 ES6 的class。

          這個class使用get和set方法定義 Custom Element 的某個屬性。

          class MyElement extends HTMLElement {
           get content() {
           return this.getAttribute('content');
           }
           set content(val) {
           this.setAttribute('content', val);
           }
          }
          

          有了這個定義,網頁之中就可以插入<my-element>了。

          <my-element content="Custom Element">
           Hello
          </my-element>
          

          處理腳本如下。

          function customTag(tagName, fn){
           Array
           .from(document.getElementsByTagName(tagName))
           .forEach(fn);
          }
          function myElementHandler(element) {
           element.textConent = element.content;
          }
          customTag('my-element', myElementHandler);
          

          運行結果如下。

          ES6 Class 的一個好處是,可以很容易地寫出繼承類。

          class MyNewElement extends MyElement {
           // ...
          }
          customElements.define('my-new-element', MyNewElement);
          

          今天的教程就到這里,更多用法請參考谷歌的官方教程。


          主站蜘蛛池模板: 午夜无码一区二区三区在线观看 | 国产亚洲综合一区二区三区| 日韩美女视频一区| 一区二区精品在线观看| 久久久久久人妻一区精品| 亚洲国产专区一区| 国产AV天堂无码一区二区三区| 激情内射亚洲一区二区三区| 日韩精品无码视频一区二区蜜桃 | 美女啪啪一区二区三区| 在线免费一区二区| 呦系列视频一区二区三区| 污污内射在线观看一区二区少妇 | 精品国产AⅤ一区二区三区4区 | 国产精品熟女一区二区| 精品国产免费一区二区三区| 日韩一区二区三区在线精品| 日韩三级一区二区| 国产在线一区二区视频| 美女视频一区二区三区| 精品视频在线观看一区二区| 免费精品一区二区三区在线观看| 亚洲色一区二区三区四区| 亚洲乱色熟女一区二区三区蜜臀| 亚洲狠狠狠一区二区三区| 国产精品合集一区二区三区| 2022年亚洲午夜一区二区福利| 日韩精品无码免费一区二区三区 | 无码国产亚洲日韩国精品视频一区二区三区 | 久久无码AV一区二区三区 | 日本免费电影一区| 国产成人一区二区三区精品久久| 乱码人妻一区二区三区| 性色AV一区二区三区无码| 精品国产一区在线观看| 内射白浆一区二区在线观看| 国产一区二区三区在线观看精品| 久久精品免费一区二区三区| 亚洲国产美国国产综合一区二区 | 日韩精品无码一区二区三区免费| 国产经典一区二区三区蜜芽|