像Excel一樣使用Python(二)

2021-08-02 04:16:27 字數 3854 閱讀 7748

像excel一樣使用python,上一期介紹了生成、檢視、替換等功能,這一期介紹資料預處理,包括資料表合併、排序、分組等。

excel裡智慧型複製貼上來合併**,或者通過vlookup函式分步實現。python中,可以直接使用merge函式來合併兩個表,可選引數較多,這裡只介紹最常用的幾個引數:

df1.merge(df2,how='inner',on=none,left_on=none,right_on=none)

或:pandas.merge(df1,df2,how='inner'…)

將df1與df2合併,how為合併方式,有「inner、outer、left、right」4種選擇,分別為「求交集、並集、固定左邊、固定右邊」。on代表用於連線的鍵名,如果兩表合併物件的列名不同,使用left_on=none, right_on=none來分別指定。在預設情況下,merge會自動以重疊的列名按inner的方式合併。

importpandasaspd

frompandasimportdataframe,series

df1=dataframe()

df2=dataframe([['arx2','kana-a'],['arx3','kana-b'],

['arx4','pdm-v'],['arx5','pdm-v1']],

columns=['gene','homo'])

df_inner=pd.merge(df1,df2,how='inner',on='gene')

printdf_inner

輸出:gene size   homo

0  arx2  530  kana-a

1  arx3  289  kana-b

2  arx4  450   pdm-v

在excel中,使用資料-排序可以對資料表直接進行排序。

資料-排序

在python中,可以使用sort_values和sort_index函式進行排序。

printdf1.sort_values(by=['size'])

輸出:gene  size

2  arx3   289

0  arx1   411

3  arx4   450

1  arx2   530

而sort_index可以按索引進行排序。

df_inner.set_index('size')

#將size列作為索引df_inner.sort_index()

#使用索引進行排序

在excel中,使用「公式-插入函式-lookup-選擇分組列與分組條件」進行分組。

公式-插入函式-lookup-分組

在python中,使用where函式對值進行判斷。

df1['group']=np.where(df1['size'] >300,'long','short')

printdf1

輸出:gene  size  group

0  arx1   411   long

1  arx2   530   long

2  arx3   289  short

3  arx4   450   long

即將一列按固定規則分為多列。在excel中,可使用「資料-分列」進行分拆。

資料-分列

在python中,使用split函式。若以「-」為分隔符,對「homo」列中的所有元素進行分割,index與df2保持一致,列重新取名為「category」和「number」,則表示式如下:

df3=dataframe((x.split('-')forxindf2['homo']),index=df2.index,columns=['category','number'])

printdf3

輸出:category number

0     kana      a

1     kana      b

2      pdm      v

3      pdm     v1

按索引進行提取使用loc函式。

printdf1.loc[:2]

#提取從0至1的資料printdf1.loc[1]

#提取索引為1的資料

按位置提取,使用iloc函式,將橫縱方向標籤均從0開始計算。

printdf1.iloc[2,2]

#第三行第三列的資料printdf1.iloc[:3,:3]

#前三行前三列的資料

同時又按索引又按位置提取,使用ix函式。

df1=df1.set_index('gene')

#將gene設為索引列printdf1.ix[:'arx2',:3]

#索引arx2之前及0-2列部分

按條件提取,可使用isin函式。isin函式用來判斷是否為給定值,是返回「true」,否返回「false」。將isin函式巢狀如loc函式中,可以輸出結果為「true」的資料。

printdf1['group'].isin(['long'])

輸出:0     true

1     true

2    false

3     true

name: group, dtype: bool

printdf1.loc[df1['group'].isin(['long'])]

輸出:gene  size group

0  arx1   411  long

1  arx2   530  long

3  arx4   450  long

excel中可以使用「資料-篩選」根據字段進行篩選。

資料-篩選

python中可使用與、或、非,」&」、」|」、」!=」和loc函式一起進行篩選。例如篩選size>400,homo帶有kana的資料:

printdf_inner.loc[(df_inner['size'] >400)&(df_inner['homo'].isin(['kana-a']))]

或者使用query函式進行搜尋。

printdf_inner.query('size>400')

本文參考:

python for data analysis

藍鯨**分析部落格,作者藍鯨(王彥平)

像Excel一樣使用Python(一)

在進行資料處理時,如果資料簡單,數量不多,excel是大家的首選。但是當資料眾多,型別複雜,需要靈活地顯示切片 進行索引 以及排序時,python會更加方便。借助python中的numpy和pandas庫,它能快速完成各種任務,包括資料的建立 檢查 清洗 預處理 提取 篩選 彙總 統計等。接下來幾篇...

像用excel一樣用pandas

預計需要15min閱讀此教材 本教材僅講述如何檢視excel資料,篩選,排序,查詢替換資料,不涉及excel中複雜的圖形繪製及樣式修改。假設,已經存在乙個test.xlsx檔案,僅包含乙個sheet,檔案內容如下。col1 col2 foo1 bar1 foo2 bar2 讀取乙個excel並賦值給...

像外行一樣思考,像專家一樣實踐

像外行一樣思考,像專家一樣實踐,不只是說說而已。題記 看了試讀的章節有些日子,看完了試讀部分,其中一部分是能和我共鳴,還有一部分觀點,自己也比較贊成,但貌似又有些抽象。我想,書不單是用來讀的,讀一本好書,就像吃肉一樣,吸收書中的營養,把營養轉換為自己的血液,直到骨髓中,成為生命中的一部分。像外行一樣...