pandas 提取某幾列_Pandas使用筆記隨筆
阿新 • • 發佈:2021-01-01
技術標籤:pandas 提取某幾列
'''pandas使用規則''' import pandas as pd import numpy as np '''series''' #有兩個引數index與values,如果不定義index的話預設從0開始 s1=pd.Series([1,3,5,7,9],index=('a','b','c','d','e')) #給series新增元素 s1['f']=11 print(s1) #%% #numpy隨機數 num=0 while(num<5): np.random.seed(1)#seed是固定了隨機數相同,裡面的數字隨便設 print(np.random.random()) num+=1 #%% #pandas隨機數序列 suijishu=pd.Series(np.random.random(5)) print(suijishu) #%% ''' pandas元素提取切片 ''' #head(),tail(),take() s1.head(2) s1.tail(2)#沒有引數的時候是預設檢視前5個與後5個 '''s1.take(['c','d','a'])'''#無法提取??? '''print(s1.take([2,1,0]))''' #%% #利用位置標籤提取元素 #可以用位置索引 print(s1[2]) #可以用標籤索引 print(s1['d']) print(s1[[2,3,4]]) print(s1[['b','e']]) #切片 print(s1[2:3])#不包括3,第四項 print(s1['c':'d'])#包括最後一項d #%% '''時間序列''' from datetime import datetime import pandas as pd date=datetime(2016,1,1) date=pd.Timestamp(date) print(date) ts=pd.Series(1,index=[date]) print(ts) #to_datetime()將series的index轉換為datetimeindex dates=['2016-01-01','2016-01-02','2016-01-03'] ts=pd.Series([1,2,3],index=pd.to_datetime(dates)) print(ts) print(ts[0]) print(ts.index[0]) print(ts.values[0]) #%% '''滯後''' print(ts.shift(1)) print(ts.shift(-1)) #%% '''高低頻時間資料轉換''' #resample()修改資料的頻率,resample(資料的頻率,轉換的方法) rts=ts.resample('M',how='first')#M是每月最後一天,MS是每月第一天 print(rts) #%% '''Dataframe物件''' #有三個引數(資料、index、columns) import pandas as pd import numpy as np dates=['2016-01-01','2016-01-02','2016-01-03','2016-01-04','2016-01-05','2016-01-06'] dates=pd.to_datetime(dates) df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('abcd')) print(df) #%% '''讀取csv檔案''' pd.read_csv('D:/shuju.csv',encoding='GB18030',header=0,sep=',') #header=0是指第0行的資料用來做列名,header=None是指沒有列名 #name是個指定各列變數名,如果header=0那麼可以讓name=None #sep是指逗號作為分隔符 #encoding='GB18030'是由於csv中有中文 #%% '''檢視dataframe物件''' print(df) print(df.head(3)) print(df.tail(2)) print(df.columns) print(df.index) print(df.values) print(df.describe())#對df中的資料進行描述性統計 #%% '''dataframe物件的索引與切片''' print(df[1:3])#取行數,第2,3行,沒有第4行 print(df['a'])#取這一列,其實就是一個series print(df[['a','b']])#提取多列,需要兩個中括號 print(df[df['a']>0])#取a列中大於0的 #%% '''loc與iloc的使用 loc是標籤切片索引,iloc是位置索引 df.loc[row_indexer,column_indexer]''' df.loc[:,'a'] df.loc[:,'a':'c']#提取多列 df.loc[dates[0:2],'a':'c']#要加index的名稱dates,不能用df.loc[[0:2]] df.loc[dates[0],'a']#只提取一個標量 df.at[dates[0],'a']#只提取一個標量,同上 df.loc[df.loc[:,'a']>0]#提取a列大於0的行 '''df.iloc[row_indexer,column_indexer]''' df.iloc[2]#取第3行 df.iloc[:,2]#取第3列 df.iloc[[1,4],[2,3]]#取某幾行與某幾列 df.iloc[1:4,1:3]#切片 第2行到第4行,因為最後一行不取,第2列到第3列,第4列不取 df.iloc[3,3]#取特定的值 df.iat[3,3]#same df.loc[:,df.iloc[3]>0]#取第4行大於0的所有列,注意前面不能用iloc??? '''dataframe的操作''' df.T #DataFrame.sort(columns=None,axis=0,ascending=True),其中axis=0為預設值,按照index行對資料進行排序,當axis取1時按照列的名字進行排序。不適用與python3 df.sort_index(ascending=False)#ascending=false是降序,=true是升序 #df.sort_values(ascending=True)#??? df.rank(axis=0)#預設都是升序,返回的是排名次序,axis=0是每列中的資料進行排序 df.rank(axis=1,ascending=False)#axis=1是指每行的資料新型排序 #%% '''增加行或者列''' s2=pd.Series([1,2,3,4,5,6],index=pd.date_range('20160102',periods=6)) print(s2) df['E']=s2 print(df)#增加一列自動匹配行號 #合併操作---橫向 df=df[list('abcd')] df1=pd.concat([df,s2],axis=1) print(df1) #%% import pandas as pd df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'f']}) print(df) #如果是一個序列或者陣列, #那麼判斷該位置的值,是否在整個序列或者陣列中 df.isin([1, 3, 12, 'a']) #%% df = pd.DataFrame({'A': [1, 2, 3], 'B': [1, 4, 7]}) #如果是一個dirt, #那麼就會首先判斷對應的index是否存在, #如果存在,那麼就會判斷對應的位置,在該列是否存在 df.isin({'A': [1, 3], 'B': [4, 7, 12]})#判斷in,並且是字典形勢的 ~df.isin({'A': [1, 3], 'B': [4, 7, 12]})#~判斷not in #%% df = pd.DataFrame([[1,2,3],[1,3,4],[2,4,3]],index = ['one','two','three'],columns = ['A','B','C']) print(df) mask = df['A'].isin([1]) #括號中必須為list print(mask) print(df[mask])#生成一個dataframe只選擇A列中值為1的行留下來,也可以寫成df1=df[df['A'],isin([1])],df1是一個dataframe #%% import pandas as pd df = pd.DataFrame([[1,2,3],[2,3,4],[2,4,3],[1,3,7]], index = ['one','two','three','four'],columns = ['A','B','C']) print(df) df.sort_values(by=['A','B'],ascending=[0,1],inplace=True)#A為主排序,B為次排序,ascending是反轉的意思,0是true,1是false print(df) #%% '''list使用規則''' list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ] tinylist = [123, 'runoob'] print (list) # 輸出完整列表 print (list[0]) # 輸出列表第一個元素 print (list[1:3]) # 從第二個開始輸出到第三個元素 print (list[2:]) # 輸出從第三個元素開始的所有元素 print (tinylist * 2) # 輸出兩次列表 print (list + tinylist) # 連線列表 list.append('acd')#append 追加元素到末尾 list.insert(1,'jack')#在1處插入jack list.pop()#刪除list末尾元素,pop(i)刪除指定元素 list[1]='jenny'#直接替換在1處的元素 #list元素也可以是另一個list #%% '''dict使用規則 使用鍵-值(key-value)儲存''' d={'Michael': 95, 'Bob': 75, 'Tracy': 85} print(d['Michael'])#查詢key對應的value d['Jack']=65#通過key放入值,一個key只可以存一個值 print(d) print('thomas' in d)#檢驗thomas是否在key中 d.pop('Bob')#刪除一個key對應的value也會刪除 #%% '''Dataframe修改列名''' Df.rename(columns={'A':'a','B':'b','C':'c'},inplace=True) #%% '''獲取dataframe 的行數,列數''' df.shape[0]#行數 df.shape[1]#列數 #%% '''寫入csv''' increase_df.to_csv("C:/Users/fei/Desktop/increase.csv",index=False,sep=',')