十分鐘入門pandas(下)【解讀pandas官方文檔】
前言
前文傳送門:
十分鐘入門pandas(上)【解讀pandas官方文檔】
十分鐘入門pandas(中)【解讀pandas官方文檔】
import pandas as pdnimport numpy as npnimport matplotlib.pyplot as pltn
數據透視表
查看更多內容:http://pandas.pydata.org/pandas-docs/version/0.20/reshaping.html#reshaping-pivot
import datetimen
註:導入時間模塊
df = pd.DataFrame({A: [one, one, two, three] * 6,n B: [A, B, C] * 8,n C: [foo, foo, foo, bar, bar, bar] * 4,n D: np.random.randn(24),n E: np.random.randn(24),n F: [datetime.datetime(2013, i, 1) for i in range(1, 13)] +n [datetime.datetime(2013, i, 15) for i in range(1, 13)]})ndfn
註:創建了一個dataframe
我們可以很容易地從這些數據生成數據透視表:
pd.pivot_table(df, values=D, index=[A, B], columns=[C])n
註:數據透視表玩法很多,大家通過幫助文檔好好研究下
時間序列
pandas具有簡單,強大和高效的功能,用於在頻率轉換期間執行重採樣操作(例如,將數據轉換為5分鐘數據)。 這在金融應用中非常常見,但不限於此。 請參閱時間序列部分:http://pandas.pydata.org/pandas-docs/version/0.20/timeseries.html#timeseries
rng = pd.date_range(1/1/2012, periods=100, freq=S)nrngn
。。。。。。
首先創建了一個100秒時間戳的系列,s為second的意思。
頻率:字元串或pandas偏移對象,可選 一個pandas日期偏移字元串或相應的對象
ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng)ntsn
將剛產生的時間序列rng作為索引index,隨機產生0-500之間的整數作為值。
。。。。。。
將該系列縮小為5分鐘,就是五分鐘採樣一次,並對其值進行求和:
ts.resample(5Min).sum()n
時區表示
rng = pd.date_range(3/6/2012 00:00, periods=5, freq=D)nrngn
註:產生5個數的時間序列,偏移量為D:Day,日期
ts = pd.Series(np.random.randn(len(rng)), rng)ntsn
註:將產生的日期作為索引,產生日起數量(5個)的標準正態分布的數值
本地化時區表示:
ts_utc = ts.tz_localize(UTC)nts_utc n
轉換成其他時區:
ts_utc.tz_convert(US/Eastern)n
在時間跨度表示之間轉換:
rng = pd.date_range(1/1/2012, periods=5, freq=M)nts = pd.Series(np.random.randn(len(rng)), index=rng)ntsn
ps = ts.to_period()npsn
註:將時間日期索引轉化為時間階段索引(這裡是用月份表示)
ps.to_timestamp()n
註:用月份的初始日期表示
分類
自版本0.15以來,pandas可以在DataFrame中包含分類數據。 有關完整文檔,請參閱分類介紹:http://pandas.pydata.org/pandas-docs/version/0.20/categorical.html#categorical
和API文檔:http://pandas.pydata.org/pandas-docs/version/0.20/api.html#api-categorical
df = pd.DataFrame({"id":[1,2,3,4,5,6], "raw_grade":[a, b, b, a, a, e]})ndfn
將原始成績轉換為分類數據類型:
df["grade"] = df["raw_grade"].astype("category")ndf["grade"]n
註:顯示成績可以分為三類
將類別重命名為更有意義的名稱
df["grade"].cat.categories = ["very good", "good", "very bad"]ndf["grade"]n
註:顯示的就是分類信息了
df["grade"] = df["grade"].cat.set_categories(["very bad", "bad", "medium", "good", "very good"])ndf["grade"]n
註:顯示的就是分類信息了
排序是按類別中的順序排列的,而不是詞法順序
df.sort_values(by="grade")n
註:根據成績排序
按分類列分組還顯示空類:
df.groupby("grade").size()n
註:統計分類後每類元素個數
繪圖
繪圖更多用法:http://pandas.pydata.org/pandas-docs/version/0.20/visualization.html#visualization
import matplotlib.pyplot as pltn
註:導入繪圖模塊
ts = pd.Series(np.random.randn(1000), index=pd.date_range(1/1/2000, periods=1000))nts = ts.cumsum()ntts.cumsum()s.plot()nplt.show()n
註:繪製時間序列圖形,ts.cumsum()為累積值,繪圖必須使用show()方法才能展現出來圖。
在DataFrame中,plot()可以方便地繪製帶有標籤的所有列:
df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index,n columns=[A, B, C, D])ndf = df.cumsum()nplt.figure()ndf.plot()nplt.legend(loc=best)nplt.show()n
獲取數據輸入/輸出
CSV
寫入csv文件:http://pandas.pydata.org/pandas-docs/version/0.20/io.html#io-store-in-csv
df.to_csv(foo.csv)n
讀取csv文件:http://pandas.pydata.org/pandas-docs/version/0.20/io.html#io-read-csv-table
pd.read_csv(foo.csv)n
。。。。。。
Excel
讀取和寫入Excel文件:http://pandas.pydata.org/pandas-docs/version/0.20/io.html#io-excel
寫入Excel:
df.to_excel(foo.xlsx, sheet_name=Sheet1)n
讀取Excel:
pd.read_excel(foo.xlsx, Sheet1, index_col=None, na_values=[NA])n
。。。。。。
易錯點
如果你操作時遇到類似這種問題:
你可以看看這裡的解釋尋求幫助:http://pandas.pydata.org/pandas-docs/version/0.20/basics.html#basics-compare
也可以參考這裡:http://pandas.pydata.org/pandas-docs/version/0.20/gotchas.html#gotchas
花了一天半時間把10分鐘入門pandas官方文檔解讀了一下,大家有興趣可以深入了解官方文檔的內容,或者用到某部分再去查文檔也是很ok的,哈哈。
感謝你的閱讀~
作者:王大偉 Python愛好者社區唯一小編,請勿轉載,謝謝。
出處:十分鐘入門pandas(下)【解讀pandas官方文檔】 配套視頻教程:Python3爬蟲三大案例實戰分享:貓眼電影、今日頭條街拍美圖、淘寶美食 Python3爬蟲三大案例實戰分享公眾號:Python愛好者社區(微信ID:python_shequ),關注,查看更多連載內容。
推薦閱讀: