溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

鮮為人知的Pandas技巧有哪些

發布時間:2021-11-30 15:23:50 來源:億速云 閱讀:194 作者:小新 欄目:編程語言

這篇文章主要介紹了鮮為人知的Pandas技巧有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

Pandas為Python營造了一個高水平的操作環境,還提供了便于操作的數據結構和分析工具

對于pandas新手而言,Pandas為Python編程語言營造了一個高水平的操作環境,還提供了便于操作的數據結構和分析工具。Pandas這個名字是由“面板數據”(panel  data)衍生而來,這是一個計量經濟學中的術語,它是一個數據集,由同一個個體在多個時間段內所觀察的結果組成。

1. 數據范圍

從外部應用程序接口(API)或者數據庫中抓取數據的時候,通常需要確定一個數據范圍。Pandas可以很好地解決這一問題,它的data_range函數能夠產出按日、月、年等方式遞增的日期。

假設現在需要一組按天數遞增的數據范圍。

date_from ="2019-01-01"  date_to = "2019-01-12"  date_range = pd.date_range(date_from, date_to, freq="D")  date_range
鮮為人知的Pandas技巧有哪些

把產出的date_range轉化為開始和結束日期,這一步可以用后續函數(subsequentfunction)完成。

for i, (date_from, date_to) inenumerate(zip(date_range[:-1], date_range[1:]), 1):  date_from = date_from.date().isoformat()  date_to = date_to.date().isoformat()  print("%d. date_from: %s,date_to: %s" % (i, date_from, date_to))1. date_from: 2019-01-01,date_to: 2019-01-02

2. date_from: 2019-01-02, date_to: 2019-01-03

3. date_from: 2019-01-03, date_to: 2019-01-04

4. date_from: 2019-01-04, date_to: 2019-01-05

5. date_from: 2019-01-05, date_to: 2019-01-06

6. date_from: 2019-01-06, date_to: 2019-01-07

7. date_from: 2019-01-07, date_to: 2019-01-08

8. date_from: 2019-01-08, date_to: 2019-01-09

9. date_from: 2019-01-09, date_to: 2019-01-10

10. date_from: 2019-01-10, date_to: 2019-01-11

11. date_from: 2019-01-11, date_to: 2019-01-12

2. 使用指示符合并

合并兩個數據集就是將它們變成一個數據集的過程,這需要根據它們的公共屬性或欄來對齊其中的每一行。

合并函數中有許多arguments(對應于傳遞給函數的參數的類數組對象),其中指示符(indicator)argument可主要應用到合并過程中,它在左、右或者兩邊的數據幀(DataFrame)函數添加_merge欄,這一欄就顯示了“數據行是哪里來的”。用_merge欄來處理更大的數據集會非常有用,尤其是需要檢查合并操作的正確率時。

left = pd.DataFrame({"key":["key1", "key2", "key3", "key4"],"value_l": [1, 2, 3, 4]})
鮮為人知的Pandas技巧有哪些
right = pd.DataFrame({"key":["key3", "key2", "key1", "key6"],"value_r": [3, 2, 1, 6]})
鮮為人知的Pandas技巧有哪些
df_merge = left.merge(right,on='key', how='left',indicator=True)
鮮為人知的Pandas技巧有哪些

_merge欄可以用來檢查是否得到了我們預期的行數,而且它反映的是來自兩個數據框架的預期值。

df_merge._merge.value_counts()both 3  left_only 1  right_only 0  Name: _merge, dtype: int64

3. 最近合并(Nearest merge)

在處理像股票或者加密貨幣一類的金融數據時,還需要把報價(價格變化)與實際交易結合?,F在,假設目的是希望將每筆交易與之前幾毫秒產生的報價合并起來。Pandas有一個merge_asof函數,它能夠通過最近的key(本文中指時間戳)來合并數據框架。有關報價和交易的數據集可以從pandas實例中獲得。

報價數據框架包含了不同股票的價格變化。通常情況下,報價要比交易多得多。

quotes = pd.DataFrame(  [  ["2016-05-2513:30:00.023", "GOOG", 720.50, 720.93],  ["2016-05-2513:30:00.023", "MSFT", 51.95, 51.96],  ["2016-05-2513:30:00.030", "MSFT", 51.97, 51.98],  ["2016-05-2513:30:00.041", "MSFT", 51.99, 52.00],  ["2016-05-2513:30:00.048", "GOOG", 720.50, 720.93],  ["2016-05-2513:30:00.049", "AAPL", 97.99, 98.01],  ["2016-05-2513:30:00.072", "GOOG", 720.50, 720.88],  ["2016-05-2513:30:00.075", "MSFT", 52.01, 52.03],  ],  columns=["timestamp","ticker", "bid", "ask"],  )  quotes['timestamp'] = pd.to_datetime(quotes['timestamp'])
鮮為人知的Pandas技巧有哪些

交易數據框架包含了不同股票的交易信息。

trades = pd.DataFrame(  [  ["2016-05-2513:30:00.023", "MSFT", 51.95, 75],  ["2016-05-2513:30:00.038", "MSFT", 51.95, 155],  ["2016-05-2513:30:00.048", "GOOG", 720.77, 100],  ["2016-05-2513:30:00.048", "GOOG", 720.92, 100],  ["2016-05-2513:30:00.048", "AAPL", 98.00, 100],  ],  columns=["timestamp","ticker", "price", "quantity"],  )  trades['timestamp'] = pd.to_datetime(trades['timestamp'])
鮮為人知的Pandas技巧有哪些

通過股價報告(tickers)可以合并交易和報價信息,報告中報價可能只比交易遲了10毫秒。如果報價的時間差長于10毫秒,或者沒有報價,任何出價和詢問報價都是無效的(以蘋果股價報告*為例)。

*蘋果股價報告:AAPL ticker。

pd.merge_asof(trades,quotes, on="timestamp", by='ticker', tolerance=pd.Timedelta('10ms'),direction='backward')
鮮為人知的Pandas技巧有哪些

4. 創建Excel報告

鮮為人知的Pandas技巧有哪些

Pandas和XlsxWriter庫同時使用能夠幫助我們創建基于數據框架的Excel  報告。這能節省很多時間,不用再花時間先把數據框架存為csv格式,然后再導入Excel排版。還可以直接加入各種圖表等多種便捷操作。

df = pd.DataFrame(pd.np.array([[1,2, 3], [4, 5, 6], [7, 8, 9]]), columns=["a", "b","c"])

以下的一小段代碼就創建了一個Excel報告。要想將一個數據框架存儲到Excel文件,需要反注釋writer.save()行。

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)  # writer.save()

正如前文中提到的那樣,這個數據庫也支持添加圖表到Excel報告中。這需要確定圖表的類型(本文中是線形圖表)以及圖表所反映的數據序列,注意,這些數據序列應位于Excel的電子表格程序里(spreadsheet)。

# define the workbook  workbook= writer.book  worksheet = writer.sheets[sheet_name]# create a chart lineobject  chart = workbook.add_chart({'type': 'line'})# configurethe 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()

5. 節省磁盤空間

同時處理幾個數據科學項目,結束后通常會有很多從不同實驗中得到的預處理數據集。這樣筆記本電腦的固態硬盤很快就會被這些數據塞滿。Pandas在保存數據集時發揮作用,壓縮數據,讀取這些數據時又是解壓形式。

不妨創建一個隨機數字的大Pandas數據框架。

df = pd.DataFrame(pd.np.random.randn(50000,300))
鮮為人知的Pandas技巧有哪些

如果把這個文件存為csv格式,它會占掉硬盤驅動器上300MB的空間。

df.to_csv('random_data.csv',index=False)

通過一個compression=‘gzip’argument,就可以將文件大小縮至136MB。

df.to_csv('random_data.gz',compression='gzip', index=False)

同時,在數據框架上讀取gzipped數據也很容易,所以功能上并不會有任何損失。

df = pd.read_csv('random_data.gz')

感謝你能夠認真閱讀完這篇文章,希望小編分享的“鮮為人知的Pandas技巧有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女