此類操作預設排除缺失資料
# 求平均值
print(df.mean())
print("------")
# 指定求平均值的軸
print(df.mean(1))
print("------")
# 建立series物件s,以dates為索引並平移2個位置
s = pd.series([1,3,5,np.nan,6,8], index=dates).shift(2)
print(s)
print("------")
# 從df中逐列減去s(若有nan則得nan)
print(df.sub(s, axis='index'))
對dataframe中的資料應用函式。
# 逐行累加
print("------")
# 每列的最大值減最小值
series物件的str
屬性具有一系列字元處理方法,可以很輕鬆地運算元組的每個元素。
s = pd.series(['a', 'b', 'c', 'aaba', 'baca', np.nan, 'caba', 'dog', 'cat'])
print(s.str.lower())
pandas在join/merge兩中情境下提供了支援多種方式,基於邏輯/集合運算和代數運算來連線series,dataframe和panel物件。
df = pd.dataframe(np.random.randn(10, 4))
print(df)
print("------")
# 拆分成塊
pieces = [df[:3], df[3:7], df[7:]]
# 重新連線,可得初始陣列
print(pd.concat(pieces))
df = pd.dataframe(np.random.randn(8, 4), columns=['a','b','c','d'])
print(df)
print("------")
# 將索引為3的行增補到整個dataframe最後
s = df.iloc[3]
「組合」包含以下步驟:
# 新建dataframe物件dfdf = pd.dataframe()
print(df)
print("------")
# 對'a'列進行合併並應用.sum()函式
print(df.groupby('a').sum())
print("------")
# 對'a', 'b'兩列分別合併形成層級結構,再應用.sum()函式
print(df.groupby(['a','b']).sum())
tuples = list(zip(*[['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]))
# 多重索引
index = pd.multiindex.from_tuples(tuples, names=['first', 'second'])
df = pd.dataframe(np.random.randn(8, 2), index=index, columns=['a', 'b'])
df2 = df[:4]
print(df2)
print("------")
# .stack()方法將dataframe的列「壓縮」了一級
stacked = df2.stack()
print(stacked)
對於已經層次化的,具有多重索引的dataframe或series,stack()
的逆操作是unstack()
——預設將最後一級「去層次化」。print(stacked.unstack())
print("------")
print(stacked.unstack(1))
print("------")
print(stacked.unstack(0))
df = pd.dataframe()
print(df)
print("------")
# 生成資料透視表
print(pd.pivot_table(df, values='d', index=['a', 'b'], columns=['c']))
pandas提供了簡單、強力且有效的工具,可以在頻率轉換中進行重取樣(比如從秒級資料中提取5分鐘一更新的資料)。這在金融工程中應用甚廣,當然也不僅限於金融領域。
rng = pd.date_range('3/6/2012 00:00', periods=5, freq='d')
ts = pd.series(np.random.randn(len(rng)), rng)
print(ts)
print("------")
# 設定國際時區標準
ts_utc = ts.tz_localize('utc')
print(ts_utc)
print("------")
# 切換時區
print(ts_utc.tz_convert('us/eastern'))
週期和時間戳之間的轉換讓我們可以方便的使用一些算術運算。比如下面的例子,我們把乙個以季度為單位的時間序列轉換為按日期表示。
prng = pd.period_range('1990q1', '2000q4', freq='q-nov')
ts = pd.series(np.random.randn(len(prng)), prng)
print(ts.head())
print("------")
ts.index = (prng.asfreq('m', 'e') + 1).asfreq('h', 's') + 9
print(ts.head())
df = pd.dataframe()
# 將原始記錄轉換為分類型別
df["grade"] = df["raw_grade"].astype("category")
print(df["grade"])
將類別重新命名為更有意義的字樣
df["grade"].cat.categories = ["very good", "good", "very bad"]
# 重排類別同時新增上缺失的類別名稱
df["grade"] = df["grade"].cat.set_categories(["very bad", "bad", "medium", "good", "very good"])
print(df["grade"])
print("------")
# 排序在各分類中分別進行
print(df.sort_values(by="grade"))
print("------")
# 對類別列分組可以顯示空類
print(df.groupby("grade").size())
# 生成一串隨機序列
ts = pd.series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
# 求累加和
ts = ts.cumsum()
# 輸出圖象
ts.plot()
# 生成乙個4列的dataframe,每列1000行,並逐列累加
df = pd.dataframe(np.random.randn(1000, 4), index=ts.index, columns=['a', 'b', 'c', 'd'])
df = df.cumsum()
df.plot(); plt.legend(loc='best')
# 輸出至.csv檔案
df.to_csv('haha.csv')
# 從.csv檔案中讀取資料
pd.read_csv('haha.csv')
# 輸出至.xlsx檔案
df.to_excel('haha.xlsx', sheet_name='sheet1')
# 從.xlsx檔案中讀取資料
pd.read_excel('foo.xlsx', 'sheet1', index_col=none, na_values=['na'])
('haha.csv')
10分鐘入門Pandas(一)
自 pandas文件 這裡只是乙個簡單的介紹,面向初學的小夥伴,如果想要學習更多的pandas知識點,請看文件當中的cookiebook部分,當然,後續也會進行翻譯。官方文件當中使用了numpy結合pandas使用,我們在舉例子的過程當中,保留文件案例的同時採用乙個新的案例,商品關係資料結構 商品表...
Pandas 10 離散化和分箱
在機械學習中,我們經常會對資料進行分箱處理的操作,也就是 把一段連續的值切分成若干段,每一段的值看成乙個分類。這個把連續值轉換成離散值的過程,我們叫做分箱處理。比如,把年齡按15歲劃分成一組,0 15歲叫做少年,16 30歲叫做青年,31 45歲叫做壯年。在這個過程中,我們把連續的年齡分成了三個類別...
10分鐘 深入less
三種方式引用less 瀏覽器引用 less.js link type text lesss node中使用 工程中使用 變數 key value在js中,條件語句中 可以使用 if,else,switch定義,less中語句中跟switch中case比較像。less 沒有像js中這樣的關鍵字,但是也...