數據分析工具篇---Python---pandas常用操作彙總

準備工作

導入庫:import pandas as pd
讀取文件:df=pd.read_csv(”文件路徑“)
導出文件:df.to_excel(excel_writer=r"路徑")
查詢部分數據:df.head() 默認前5行
查詢尾部數據:df.tail()默認後5行
查詢當前數據信息:df.info()
查詢數據索引信息:df.index
查詢數據列名:df.columns
查詢數據值:df.values

數據處理

獲取某列數據:df[“列名”]
將某列作爲索引:df=df.set_index(‘列名’)
將取出的數據進行運算

age=df[‘age’]
age=age+/-/* N
age.mean()
age.min()

統計數據的各項數據指標:df.describe()

索引

傳入多列數據:df=df[[‘列名’,‘列名’]]

傳入指定列:

loc
通過行標籤定位傳入數據:df=df.loc[0]
通過切片傳入多行數據:df=df.loc[0:]
傳入某行某列數據:df=df.loc[0,[‘列名’,‘列名’]]
只傳入某列:df=df.loc[: , [‘c’]]
註釋:當然獲取某列數據最直接的方式是df.[列標籤],但是當列標籤未知時可以通過這種方式獲取列數據。需要注意的是,dataframe的索引[1:3]是包含1,2,3的,與平時的不同。

iloc

通過行號獲取行數據:df.iloc[1] 注:通過行標籤索引會報錯
同樣通過行號可以索引多行:df.iloc[0:]
索引列數據:df.iloc[:,[1]]

ix
結合前兩種的混合索引,既可以通過行號,又可以通過行標籤獲取數據。 但要被遺棄

將某列作爲索引 : df=df.set_index(‘列名’)
將布爾類型作爲索引:篩選數據:df[df[‘某列’] >/</=/== 條件]

統計某條件下的數據特徵
統計性別爲男性的年齡的均值 : df.loc[df[‘sex’]==‘male’,‘age’].mean()
判斷值是否在某個集合中 : s.isin([1,2,3])
返回與某個集合內匹配索引對應的值 : s[s.isin([1,3,4])]
多重索引 : s2=pd.Series(np.arange(6),index=pd.MultiIndex.from_product([0,1],[‘a’,‘b’,‘c’]]))
返回多重索引下的值 : S.iloc[s2.index.isin([1,‘a’),(0,‘b’)])]

where 操作
S[S>2]
df.where(df<0)

query 操作
df.query(’(A<B)&(B,C)’)

分組統計 :
df.groupby()
實例 : df.groupby(‘sex’)[‘age’].mean()

df=pd.cut(x,bins,right,labels)
x傳入要切分的一維數組或列表
bins切分方式或者是切分爲幾組
right:false爲左閉右開,true爲左開右閉
labels:爲分組標籤

刪除空值 :
df.dropna
dropna函數默認刪除所有出現空值的行,即只要一行中任意一個字段爲空,就會被刪除。我們可以設置subset參數,例如dropna(subset = [‘name’]),來指定當一行中的name字段爲空時,纔會被刪除。

去重 :
drop_duplicates方法去重默認會刪掉完全重複的行(每個值都一樣的行),如果我們要刪除指定列重複的數據,可以通過指定subset參數來實現。

數值運算

基本運算

求和
按列求和 : df.sum() 默認按列求和 df.sum(axis=0)
按行求和 : df.sum(axis=1) df.sum(axis=‘columns’)
均值/中位數
mean/median : 其他操作與求和方法相同

二元統計
協方差 :df.cov()
相關係數:df.corr()
按不同值 計數 :df[‘age’].value_counts()
默認按數量降序排列 : df[‘age’].value_counts(ascending=True)
按數量升序排列 : df[‘age’].value_counts(ascending=True,bins =5)
數據分組計數
統計該列非空值 :df[‘age’].count()

對象操作

Series

構建

data=[1,2,3]
index=[‘a’,‘b’,‘c’]
s=pd.Series(data=data,index=index)

s1.append(s2,ignore_index=False)
ignore_index 是否更換爲新索引

del s1[‘a’]
del s1[‘a’,‘b’,inplace=True)

通過複製,修改
s1=s.copy()
s1[‘索引’]=修改值

直接原位置修改
s1.replace(to_replace=100,value=101,inplace=False)
to_replace 要修改的值
value 改成值
True/False 是/否 修改源值

改索引
s1.index=[‘a’,‘b’,‘w’]
s1.rename(index=[‘a’,‘A’].inplace=Ture)


切片
loc
iloc

DataFrame

構建

data=[[1,2,3],[4,5,6]]
index=[‘a’,‘b’]
colums=[‘A’,‘B’,‘C’]
df=pd.DataFrame(data=data,index=index,colums=colums)


[‘列名’],loc,iloc


值: df.loc[‘a’][‘A’]=150
索引: df.index[‘f’,‘g’]


自增 : df.loc[‘c’]=[1,2,4]
增加另一個 : df3=pd,concat([df,df2],axis=0) 默認按axis=0,豎向拼接


行 : df.drop([‘索引’],axis=0,inplace=True)

一列 : del df[‘列名’]
多列 : df.drop([‘a’,‘b’],axis=1,inplace=True)

drop函數制定刪除對應的列,axis = 1表示針對列的操作,inplace爲True,則直接在源數據上進行修改,否則源數據會保持原樣。

縱向合併
concatpd:三個sheet的數據,維度完全一致(每列數據都是一樣),縱向合併起來分析十分方便。對於列字段統一的數據,我們只需把表依次傳入參數:
df=pd.concat([表1,表2,表3])

merge(多表合併)
pd.merge[‘表1’,‘表2’]
默認按共同列合併
pd.merge(‘表1’,‘表2’,on = ‘key’)
pd.merge(‘表1’,‘表2’,on = [‘key1’,‘key2’])
多個索引合併時
若兩索引完全相同,則可避免產生重複列
若兩索引不完全相同,則只返回相同部分的合併結果
pd.merge(‘表1’,‘表2’,on = [‘key1’,‘key2’],how=‘outer’) 並集
若不完全匹配,則用空值填充

顯示設置
顯示行數 :pd.get_option(‘display.max_rows’) 60
pd.set_option([display.max_rows’, N) N爲你想顯示的行數
顯示列數 :pd.get_option(‘display.max_columns’) 20
pd.set_option([display.max_columns’, N)
顯示字符串:pd.get_option(‘display.max_colwidth’) 50
pd.set_option(‘display.max_colwidth’,100)
顯示小數位數:pd.get_option(‘display.precision’) 6
pd.set_option(‘display.precision’,5)

數據透視表
example_pivot=example .pivot(index=’ 類別1’,columns=‘類別2’,values=‘統計值’)
默認求平均
example_pivot=example .pivot(index=’ 類別1’,columns=‘類別2’,values='統計值’,aggfunc=‘sum/max/…’)
example_pivot.sum(axis=1)
example_pivot.sum(axis=0)

計數
pd.crosstab(index=df[‘sex’],columns=df[‘Pclass’])

排序
sort_values函數,顧名思義是按照數值進行排序,首先要傳入的參數是列參數,即我們根據哪一列的數值來進行排序,ascending參數決定了排序順序,等於Flase則是從大到小的降序,設置爲True則是升序。

時間序列

時間

構建

import pandas as pd
ts=pd.Timestamp(‘2019-07-24’)
ts=pd.to_datetime(‘2019-07-24’)
ts=pd.Series(pd.date_range(start=‘2019-07-24’,periods=10,freq=‘12H’))
構建時間序列,起始時間,數據個數,時間間隔
ts.month
ts.day

運算
ts+pd.Timedelta(‘5 days’)

時間序列處理

導入
data=pd.read_csv(‘路徑’)
data[‘Time’]=pd.to_datetime(data[‘Time’])
data=data.set_index(‘Time’)
作用:將文件文件中字符串格式轉成時間格式,並替換爲索引

簡單方案
data=pd.read_csv(‘路徑’,index_col=0,parse_dates=True)

取數據
切片
data[pd.Timestamp(‘2012-01-01 09:00’):pd.Timestamp(‘2012-01-01 19:00’)]

取最後的數據
data.tail()

取出指定的數據
data[2013]
data[‘2012-01’,‘2013-01’]
data[data.index.month ==1]
data[(data.index.hour >8)&(data.index.hour <12)]
data.between_time(‘08:00’,‘12:00’)
data.resample(‘D’).mean()
D代表天

按天統計
data.resample(‘3D’).mean()
data.resamp(‘M’).mean().

常用操作

排序
data.sort_values(by=[‘group’,‘data’],ascending=[False,True],inplace=True)

參數:
by 排序列
ascending 升序/降序 False/True
多個列表示多條件排序,以第一列的爲主
inplace 是否在原值更改

排序時去掉重複值(去掉共同重複值)
data.drop_duplicates()
以某列爲主,去掉該列重複值,以及只保留僅能與該列剩餘數據匹配的數據
data.drop_duplicates(subset=‘K1’)

映射

map()
構建一個字典:food={ ‘A1’:‘A’,‘A2’:‘A’,‘B1’:‘B’}

將對應的數轉換成類別

data[‘類別’]=data[‘原數據’].map(food)
輸出,可將A1,A2 都轉化成A

構建計算列
import numpy as np
df=pd.DataFrame({‘data1’:np.random.randn(5),‘data2’:np.random.randn(5) })
df.assign(ration = df[‘data1’]/df[‘data2’])
df.assign 可實現其他計算操作

刪除
df.drop(‘列名’,axis=‘columns’,inplace=True)

替換
data.replace(‘需替換值’,‘替換值’,inplace=True)

構建分組區間
ages=[15,18,20,21,22,79]
bins=[10,40,80]
bins_res=pd.cut(aggs.bins)
把ages內的值,做映射,標記在哪個分組期間

各分組區間內的值計數
pd.value_counts(bins_res)

缺失值
判斷是否爲缺失值
df.isnull()
行是否含有
df.isnull().any()
列是否含有
df.isnull().any(axis=1)
用某值替換缺失值
df.fillna.(“某值”)
體現出缺失值及位置
df(df.isnull().any(axis=1))

字符串處理
大小寫轉換
s.str.lower()
s.str.upper()
字符串長度
s.str.len()
去除空格
s.str.strip()
值替代
s.str.replace(" “,”-")

切分
s.str.split(’-",expand=True,n= X)
expand 是否切分開作爲新的數據
X 爲切分次數,小於等於"-"的個數
判斷是否包含
s.str.contains(‘xxx’)

切分操作
s.str.get_dummies(sep=“分隔符”)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章