pandas 批量修改列名_Pandas增刪改查的詳細總結
阿新 • • 發佈:2021-01-08
技術標籤:pandas 批量修改列名
Numpy和Pandas是Python進行資料分析的基礎庫,當初學習Pandas就買了《利用Python進行資料分析》這本書來看,書非常棒,既深入又通俗,而且這本書的原作者就是Pandas庫的主要建立者之一。Pandas最常用的兩種資料結構是Series和DataFrame,Series是一維資料,類似一維陣列,DataFrame是二維資料,類似Excel表格,這兩種資料結構都包含資料標籤index,在沒有設定index時,系統會自動分配(0到N-1)。本文使用Jupyter notebook進行程式設計測試。
建立/讀取Series和DataFrame資料
import pandas as pd import numpy as np #建立資料 data_series = pd.Series([1,2,3,4]) #列表生成Series data_pd = pd.DataFrame({'col1':[1,2,3,4],'col2':[5,6,7,8]}) #可用包含等長列表(陣列/Series)的字典生成DataFrame #設定索引 data_series = pd.Series([1,2,3,4],index=['a','b','c','d']) #列表生成Series data_pd = pd.DataFrame({'col1':[1,2,3,4],'col2':[5,6,7,8]},index=['a','b','c','d']) #分別檢視值和索引 print(data_series.index) print(data_pd.index) print(data_series.values) #一維陣列 print(data_pd.values) #二維陣列 #讀取其他資料檔案 df_excel = pd.read_excel('file.xlsx',sheet_name='Sheet1') #讀入excel檔案 df_csv = pd.read_csv('file.csv') #讀入csv檔案 df_json = pd.read_json('file.json') #輸出資料檔案 df.to_csv('save_file.csv') df.to_excel('save_file.xlsx') df.to_json('save_file.json')
索引物件
Pandas的索引物件用來儲存軸標籤(包括行索引和列索引),索引物件不可以修改,類似於陣列和集合,與集合不同的是索引可以重複。
#輸出DataFrame的索引物件 print('data_pd.columns: ',data_pd.columns) print('data_pd.index: ',data_pd.index) #生成索引物件 index = pd.Index(np.arange(3)) #判斷元素是否存在索引中 1 in index #返回True 4 in index #返回False #重置索引reindex data_pd.reindex(['a','c','b','d','h','f']) #資料按照新索引進行排列,如果索引不存在為NaN data_pd.reindex(columns = ['col3','col2','col1']) #重置列索引
查詢資料
#查詢列資料
data_pd['col1'] #查詢一列
data_pd[['col1','col2']] #查詢多列
#切片查詢資料
data_pd[:2] #得到前2行的資料
#利用索引符號loc查詢資料(軸標籤)
data_pd.loc['c'] #查詢c行
data_pd.loc['c','col2'] #可傳入兩個引數,行標籤和列標籤,查詢c行col2列的資料
data_pd.loc[['c','d'],'col2'] #標籤可傳入列表作為引數選擇多列多行
data_pd.loc[:'c','col2'] #loc可進行切片選擇行列
#利用索引符號iloc查詢資料(整數標籤)
data_pd.iloc[2] #查詢第3行,c行
data_pd.ioc[2,1] #可傳入兩個引數,行整數標籤和列整數標籤,查詢第3行第2列的資料
data_pd.iloc[[2,3],1] #標籤可傳入多個整數選擇多列多行
data_pd.iloc[:2,1] #iloc可進行切片選擇行列
#按條件查詢資料
data_pd[data_pd['col1']>2] #查詢col1大於2的資料
data_pd[data_pd<2] = 0 #將資料中小於2的都賦值為0
#多條件查詢,&連線條件,選col1列大於2,col2列小於8的資料
data_new = data_pd[(data_pd['col1']>2)&(data_pd['col2']<8)]
修改資料
#插入新行
data_pd['new_col1'] = 5 #生成一行標量5
data_pd['new_col2'] = np.arange(4) #生成一行從0到3
#修改列名 rename函式
data_pd.rename(columns = {oldname1 : newname1,oldname2 : newname2,}) #傳入欄位修改
data_pd.renam(columns = lambda x : x.replace("col","")) #傳入lambda函式批量修改
#按條件修改資料
data.loc[data['order_mark'].isnull(),'order_seq'] = np.nan
將陣列和列表賦值給data_frame時,長度必須一致,而將series賦值給data_frame的一列會按照索引重新排列,不匹配的索引則為缺失值NaN。
刪除資料
#刪除列del,直接在原資料上刪除
del data_pd['new_col1']
#軸向上刪除用drop,drop函式會返回一個新物件,如果要修改原資料可加上引數inplace = True
data_pd.drop('c') #刪除c行
data_pd.drop(['col1','new_col2'],axis=1) #利用axis = 1 或者axis = 'columns'
data_pd.drop(['col1','new_col2'],axis=1,inplace=True) #在原資料上刪除
資料排序
對DataFrame資料排序,既可以按照行列標籤排序,也可以按照值進行排序,函式分別是sort_index和sort_values,排序後會生成排完序的新物件,而不是改變原來的資料。
#建立新data
data_pd2 = pd.DataFrame({'two':[1,5,7,4],'one':[3,5,7,8]},index=['b','a','d','c'])
#排序
data_pd2.sort_index() #按標籤引排序
data_pd2.sort_index(axis=1) #按列標籤排序
data_pd2.sort_values('one')
data_pd2.sort_values(by=['one','two']) #還可傳入列表序列進行多個欄位排序
data_pd2.sort_values(['one','two'],ascending=False) #預設升序,加上Ascending=False降序
用rank()函式可對dataframe和series進行排名,pandas預設相同值取平均序號,可以傳入引數更改。
#排序
data_pd2.rank() #每列資料按照從小到大得到序號
data_pd2.rank(axis=1) #可按列對每行資料進行排序
資料連線
Pandas連線資料主要是通過merge()函式和concat()函式,merge()函式的連線類似於sql資料庫中的join,而concat是在軸向上進行連線
#merge連線
pd.merge(df1,df2,on='key',how='left') #on表示連線列,how選擇連線方式
pd.merge(df1,df2,left_on='lkey',right_on='rkey',how='left') #當連線列名不同分別指定
#concat
pd.concat([s1,s2]) #縱向連線,當s1和s2索引不重疊時,可以直接拼接,相當於sql中的union
pd.concat([s1,s2],axis = 1) #橫向連線,預設外連線,以行索引為連線欄位
常用統計方法
#統計某一列值的頻率
data_pd['columns'].value_counts()