天天看點

python之pandas基本操作

pandas用法速查:

​​​ https://www.toutiao.com/i6758024966521750030/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1&timestamp=1573606334&app=news_article&utm_source=weixin&utm_medium=toutiao_android&req_id=2019111308521401002607721726B20283&group_id=6758024966521750030​​

索引資料

loc:通過行标簽索引資料

iloc:通過行号索引行資料

ix:通過行标簽或行号索引資料(基于loc和iloc的混合)被廢棄

#設定實驗資料
import pandas as pd  
data = [[1,2,3],[4,5,6]]  
index = [0,1]  
columns=['a','b','c']
#加載資料集
df = pd.DataFrame(data=data, index=index, columns=columns)
#顯示前幾行
df.head
# 1. loc——通過行标簽索引行資料,檢視某行
df.loc[1]
df.loc[0]


# 1.2 loc[‘d’]表示索引的是第’d’行(index 是字元)
import pandas as pd  
data = [[1,2,3],[4,5,6]]  
index = ['d','e']  
columns=['a','b','c']  
df = pd.DataFrame(data=data, index=index, columns=columns)
#更改行标簽 行索引
#接下來是把行标簽[0, 1, 2]改成['a', 'b', 'c'],則成這樣了
df.index = ['a','b','c']
#同樣地,把列标簽[0, 1, 2, 3]改成['A', 'B, 'C', 'D'],則成這樣了\
#更改列标簽
df.columns = ['A','B','C','D']

#檢視一行資料 
df.loc['d'] 
# 1.4 loc可以擷取多行資料
df.loc['d':]  
# 1.5 loc擴充——索引某行某列  查找某行某列
df.loc['d',['b','c']]

# 1.6 loc擴充——索引某列  查詢C列
df.loc[:,['c']] 

# 2. iloc——通過行号擷取行資料 
# 2.1 想要擷取哪一行就輸入該行數字 
df.iloc[1] 
# 2.3 同樣通過行号可以索引多行  查找多行
df.iloc[0:] 
#查找 第0列和第3列
df.iloc[:,[0,3]]
#選取某幾行資料 前幾行資料
df.iloc[0:3]
查出前5行
dfoff.iloc[:5]
#輸出第六列的前三行
dfoff.iloc[:3,6]
#取出中間某幾列
train_orignal_01=train_orignal.iloc[:,3:8]      
############################################################
#日期類操作
date(int(dfoff['Date_received'].iloc[1][0:4]), int(dfoff['Date_received'].iloc[1][4:6]), 
#根據日期來取星期
int(dfoff['Date_received'].iloc[1][6:8])).weekday()+1
#日期格式轉換
dfoff.iloc[:1,6]
# 20160217.0
pd.to_datetime(dfoff.iloc[:1,6], format='%Y%m%d')
#2016-02-17
#求取日期差
pd.to_datetime(dfoff.iloc[:1,6], format='%Y%m%d') - pd.to_datetime(dfoff.iloc[1:2,5], format='%Y%m%d')
# 最後是這種樣子 '2016-02-17' - '2016-05-28'

#判斷是否大于 15天
td = pd.to_datetime(row['Date'], format='%Y%m%d') - pd.to_datetime(row['Date_received'], format='%Y%m%d')
td <= pd.Timedelta(15, 'D')

###########################################################
#函數應用
# weekday_type :  周六和周日為1,其他為0   lambda 不斷循環
dfoff['weekday_type'] = dfoff['weekday'].apply(lambda x: 1 if x in [6,7] else 0)
#if判斷實作
def getWeekday(row):
   if row == 'null':
       return row
   else:
       return date(int(row[0:4]), int(row[4:6]), int(row[6:8])).weekday() + 1

dfoff['weekday'] = dfoff['Date_received'].astype(str).apply(getWeekday)

#資料複制  篩選複制
df = dfoff[dfoff['label'] != -1].copy()