数据分析训练营-pandas
生活随笔
收集整理的這篇文章主要介紹了
数据分析训练营-pandas
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
import pandas as pd
#創(chuàng)建列
ser=pd.Series('張三','李四','王五',list(range(1,4)))
#取值
ser[2]ind=[1,3]
ser[ind]#取索引為1和3的
ser.values#取值
type(ser.values)#ndarray ser2=pd.Series(18,19,17,list(range(1,4)))
ser2+1#每一行的數(shù)據(jù)都+1 ser2{ser2%2==0]#篩選取余
data={'beijing':9000,'shanghai':8500,'guangzhou':7400}
ser3=pd.Series(data)#索引變成了字符串beijing等
ser3['beijing']#通過索引找值
'beijing' in ser3 #判斷索引是否在返回True
ser3.to_dict()#轉(zhuǎn)化為字典
ser3.tolist()
ser3.tojson()
ser3to_frame()DataFrame
import numpy as np
data=np.arrange(100,109).reshape(3,-1)
df=pd.DataFrame(data)#生成數(shù)據(jù)表
data={'name':['jack','mary','lily'],'age':[19,19,17],'height':[1.68,1.37,1.62]}
df=pd.DataFrame(data)#字典鍵做為表頭列名
df.columns#查看列名df=pd.DataFrame(data,columns=['name','age','height','email'],index=range(1,4))#加一個(gè)空列,設(shè)置索引值數(shù)據(jù)選取操作
data={'name':['張三','李四','王五','趙六'],'age':[19,19,20,17],'height':[1.68,1.37,1.62,1.80]}
df=pd.DataFrame(data,columns=['name','age','height','email'])
df['name']#查詢名字這一列
df.age
df[['name']]#再套一個(gè)中括號可以把查詢的這一列變成表
df[['name','age']]#兩列值的dataframenames=df.name
names[0]='jack'#實(shí)際上df會(huì)被修改。張三被改成jack復(fù)制舊表,對新表進(jìn)行操作
names=df.name.copy()
name[0]='周八'
df.columns#獲取列的索引
df.columns[1:3]#Index(['age','height'],dtype='object')加一列出生年月year
import datetime
df['year']=datetime.datetime.now().year -df.age #新增列出生年月刪除列主表不受影響
df.drop('year',axis=1)
df.drop(['year','height'],axis=1)
df.drop(df.columns[1::2],axis=1)#隔一列刪除一列loc定位
df.loc[1]#輸出李四這一列
df.loc[[1]]#變成dataframe的表
不知道索引值,要最后兩個(gè)數(shù)的name和age
df.index[-2:]
df.loc(df.index[-2:])#所有列
df.loc(df.index[-2:],['name','age'])df.shape #查看維度(4,4)
df.loc[df.shape[0]]={'age':18,'name':'吳九','height':1.66,'year':0} #在最后一行插入數(shù)據(jù)df2=df.drop(2)# 刪除索引為2的行
df2.index=range(df2.shape[0])#重置索引iloc與loc的區(qū)別
iloc是物理索引,存在內(nèi)存里不能改變,loc是可以人為改變
df2.loc[2]
df.iloc[2]
df2.index=list('ABCD')#修改索引
df.iloc[1:3]#切片取數(shù)據(jù)
df.iat[1,1]#通過坐標(biāo)軸取數(shù)據(jù),第一行第一列的數(shù)據(jù)通過比較運(yùn)算符篩選數(shù)據(jù)
df2['height']>=1.65#返回True或者False
df2[df2['height']>=1.65]#取出大于等于1.65的數(shù)據(jù)
df2[(df2['height']>=1.65)&(df2['age']<=20)]#同時(shí)滿足兩個(gè)條件
query方法
df.quary('height>1.65 and age<=20')
age=20
df.query('age<@age')#age是變量,@引進(jìn)變量
isin
df['age'].isin([18,19])#是否有某些數(shù)據(jù) isin是否有18或者19歲的,返回TF
df[df['age'].isin([18,19])]#取出符合條件的數(shù)據(jù)矩陣轉(zhuǎn)置
X.T #行變列,列變行## Pandas導(dǎo)入數(shù)據(jù)pd.read_table(./01.txt)
pd.read_table(./02.txt)#tab鍵自動(dòng)識別隔開
pd.read_table(./03.txt,sep=':',header=None,names=['name','pwd','uid','gid','local','home','shell'])
#原文件分隔符為:,設(shè)置sep=':'。header是指表頭不用txt的數(shù)據(jù)。names指定表頭CSV一般列與列之間用逗號分隔
pd.read_csv(./04.csv)excel
pip3 install xlrd#安裝第三方模塊
pd.read_excel(./05.xlsx)html
pip3 intall xlml#安裝
tables=pd.read_html('./06.html',header=0) #只會(huì)讀取table的值,把表頭設(shè)置在0的位置
tabless[0]#一共有兩張表,取出第一張
tables=pd.read_html('./06.html',header=0,attrs={'class':'mydata'}) #取出class為mydata的元素mysql
pip3 install pymysql#安裝第三方軟件
con=pymysql.connect(host='localhost',username='root',password='123456',database='doubandb',charset='utf8',use_unicode=True)
#鏈接數(shù)據(jù)庫
sql_cmd='select * from books2' #寫sql命令
df=pd.read_sql(sql_cmd,con) #按照命令讀取表的內(nèi)容
df.head(2) #顯示前兩行sort
st=pd.Series(list('CAD'),index=3,1,2) #生成序列
st.sort_index()#通過索引進(jìn)行排序
st.sort_values()#通過值進(jìn)行排序
st.sort_values(ascending=False)#通過值進(jìn)行倒序排序arr=[[9,4,8],[4,6,5],[4,5,3]]#初始化一個(gè)數(shù)組
df=pd.DataFrame(arr,index=[0,2,1],columns='cab')#把數(shù)組變成表,設(shè)置索引列名
df.sort_index()
df.sort_index(axis=1)#對列進(jìn)行排序
df.sort_values(by='c')#對dataframe的某一series進(jìn)行排序rank
df.rank()#對值進(jìn)行排名merge
import numpy as np
df1=pd.DataFrame({'stu_no':['s1','s2','s3','s4','s5','s6','s7','s8'],'score':np.random.randint(50,100,size=8)}
df2=pd.DataFrame({'stu_no':['s1','s2','s3','s5'],'name':['張三','李四','王五','趙六']}
pd.merge(df1,df2,on='stu_no')#merge合并兩張表,類似inner join
pd.merge(df1,df2,on='stu_no',how='left')#merge合并兩張表,類似左連接concat
df1=pd.DataFrame(np.arange(1,5).reshape(2,-1))
df2=pd.DataFrame(np.zeros((2,2)))
pd.concat([df1,df2])#縱向疊加,行數(shù)變多
pd.concat([df1,df2],axis=1)#列疊加異常值的分析
df.head()#查看前兩條
df.tail()#查看后兩條
df.info()#查看表的屬性(內(nèi)存占用,數(shù)據(jù)類型等等
df.describe()#查看mean count min等
df.mean()#平均值
df.count()#個(gè)數(shù)
df.sum()#求和
df.sum(axis=1)#對列進(jìn)行求和
df.a#獲取a這一列
df.a.sum()#對a這一列進(jìn)行求和
df.std()#獲取標(biāo)準(zhǔn)差 體現(xiàn)波動(dòng)
df.var()#獲取方差數(shù)據(jù)分組,透視表
df=pd.read_excel('./pandas中的數(shù)據(jù)分組與透視表.xlsx')
grouped=df.groupby('類別') #以類別進(jìn)行分組,返回分組的對象
for name,data in grouped:print(name)print(data)#返回兩個(gè)類別的兩組表數(shù)據(jù)
grouped['金額','數(shù)量'].sum()#對各個(gè)組的列屬性進(jìn)行求和
grouped['單價(jià)'].max()
grouped['類別','名稱'].sum()
grouped['單價(jià)'].max()
grouped[['單價(jià)']].mean() #表
查看表的各個(gè)類別
grouped=df.groupby('類別')
for name,data in grouped:print(name)print(data['名稱'].unique())對時(shí)間序列進(jìn)行的操作
import time
time.time()
time.localtime(415646546.556)
time.strftime(%Y-%m-%d %H:%M:%S,time.localtime(1566218389))#2019-8-19 20:39:49
local=time.strptime('1987-08-22 16:53','%Y-%m-%d %H:%M')
time.mktime(local)#測試經(jīng)歷的秒數(shù)from datetime import datetime
now=datetime.now()
now.year
now.day#取出年月日
now.strftime(%Y-%m-%d %H:%M:%S)#2019-8-19 20:39:49Pandas時(shí)間序列
pd.date_range('2018-5-1','2018-10-1')#初始化時(shí)間序列 顯示出每一天,間隔頻率,天數(shù)
pd.date_range('2018-5-1','2018-10-1',freq='w')#初始化時(shí)間序列 顯示出每一周,間隔頻率為周
#freq頻率: S秒T分H小時(shí)D天Q季度M月
pd.date_range('2018-5-1',freq='Q',period=10)#從2018-5-1開始10個(gè)季度生成日志
data={'time':pd.date_range('2019-8-19',freq='T',period=200000)'cpu':np.random.randn(200000)+10#生成200000個(gè)隨機(jī)cpu
df=pd.DataFrame(data,columns=['time','cpu'])
df.head()
現(xiàn)在是1分鐘采樣,改造dataframe讓時(shí)間作為索引,改成5分鐘一次作為索引,求5分鐘平均值
df.index=pd.to_datetime(df.time)
df=df.drop('time',axis=1)#刪除多余的列
df.info()#查看時(shí)間索引
df['2019-09-01 08:00:00':'2019-09-01 08:10:00']#篩選數(shù)據(jù)
df.groupby(df.index.date).mean()#通過日期分組求平均值
df.groupby(df.index.hour).mean()
df.groupby(df.index.week).mean()
df.resample('5T').mean()#重采樣 5分鐘一次
總結(jié)
以上是生活随笔為你收集整理的数据分析训练营-pandas的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哪些网站不适合做seo优化
- 下一篇: 变编程用户输入月份,判断这个月份是属于哪