Pandas 10分鐘Pandas之旅 02

2021-08-01 07:25:43 字數 4480 閱讀 8270

此類操作預設排除缺失資料

# 求平均值

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物件df

df = 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中這樣的關鍵字,但是也...