1. 程式人生 > 其它 >pandas 提取某幾列_Pandas使用筆記隨筆

pandas 提取某幾列_Pandas使用筆記隨筆

技術標籤:pandas 提取某幾列

7d0d44c018c02d74dad1ad13dbfaebe6.png
'''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=',')