欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)邀請(qǐng)碼778899分享:pandas 04

柚子快報(bào)邀請(qǐng)碼778899分享:pandas 04

http://yzkb.51969.com/

添加修改

對(duì)數(shù)據(jù)的修改,增加和刪除在數(shù)據(jù)處理過(guò)程中時(shí)常發(fā)生。

修改數(shù)值

在Pandas修改數(shù)值非常簡(jiǎn)單,先篩選出要修改的數(shù)值范圍,再為這個(gè)范圍重新賦值

df.iloc[0,0] # 查詢(xún)值

df.iloc[0,0] = 'Lily' # 修改值

v= [1,3,4,7,9]*20 # 生成長(zhǎng)度為100的列表

df.Q1=v # 修改Q1的值

df1 = pd.DataFrame({'Q1':{1,2,3},'Q2':[4,5,6]})

df.loc[1:3,'Q1':'Q2'] = df1 # 對(duì)于修改DataFrame,會(huì)按對(duì)應(yīng)的索引位修改

替換數(shù)據(jù)

replace 方法可以對(duì)數(shù)據(jù)進(jìn)行批量替換

s.replace(0,5) # 將列數(shù)據(jù)中的0替換為5

df.replace(0,5)# 將數(shù)據(jù)中的所有0替換為5

df.replace([0,1,2,3],4) # 將0~3全換成4

df.replace([0,1,2,3],[]4,2,3,1) # 對(duì)應(yīng)修改

s.replace([1,2],method='bfill') # 向下填充

df.repalce({0:10,1:100}) # 字典對(duì)應(yīng)修改

df.repalce({'Q1':0,'Q2':5},100) # 將指定字段的指定值修改為100

df.repalce({'Q1':{0:100,4:400}}) # 將指定列里的指定值替換為另外一個(gè)指定值

# 使用正則表達(dá)式

df.replace(to_repalce=r'bd.$',value='new',regex=True)

df.replace({'A':r'^ba.$'},{'A':'new'},regex=True)

df.repalce(regex={r'^ba.$':'new','foo':'xyz'})

df.repalce(regex=[r'^ba.$','foo'],value='new')

填充空值

fillna 對(duì)空值填入指定數(shù)據(jù),通常應(yīng)用于數(shù)據(jù)清洗

df.fillna(0) # 將空值全修改為0

df.fillna(method='ffill') # 將空值修改該為其前一個(gè)值

values={'A':0,'B':1,'C':2,'D':3}

df.fillna(value=values) # 為個(gè)各列填充不同的值

df.fillna(value=values,limit=1)# 只替換第一個(gè)

修改索引名

使用df.rename和df.rename_axis對(duì)軸名稱(chēng)進(jìn)行修改。

df.rename(columns={'team':'class'}) # 返回一個(gè)新的DataFrame

df.rename(index={0:'x',1:'y',2:'z'}) # 對(duì)索引進(jìn)行修改

df.rename(index=str) # 對(duì)類(lèi)型進(jìn)行修改

df.rename(str.lower,axis='columns') # 傳索引類(lèi)型

df.rename({1:2,2:4},axis='index')

# 對(duì)索引名進(jìn)行修改

s.rename_axis('animal')

df.rename_axis('animal') # 默認(rèn)是列索引

df.rename_axis('limbs',axis='columns') # 指定行索引

df.rename_axis(index={'type':'class'}) # 索引為多層索引時(shí)可以可以將type修改為class

# 可以使用set_axis進(jìn)行設(shè)置修改

s.set_axis(['a','b','c'],axis=0)

df.set_axis(['I','II'],axis='columns')

df.set_axis(['I','II'],axis='columns',inplace=True)

增加列

Pandas 可以像定義一個(gè)變量一樣定義DataFrame中新的列

df['total'] = df.Q1+df.Q2+df.Q3+df.Q4 # 增加total 列,直接在原DataFrame上操作

df['total'] = df.sum(1) # 與上相同

df['foo'] = 100 # 新增一列foo,所有的值都是100

df.loc[df.num >= 60 ,'成績(jī)'] = '合格'

df.loc[df.num < 60 , '成績(jī)'] = '不合格'

df.insert()方法可以插入一個(gè)新的列

df.insert(2,'total',df.sum(1)) # 在第三列的位置上插入新列total,返回DataFrame

# 如果已經(jīng)存在相同的數(shù)據(jù)列,會(huì)報(bào)錯(cuò)

df.assign(k=v)為指定一個(gè)新列操作,k為列名,v為此列的值;v必須是一個(gè)與原數(shù)據(jù)同索引的Series

df.assign(toatl = df.sum(1)) # 返回一個(gè)新的DataFrame

df.assign(toatl = df.sum(1)).assign(Q=100) # 增加兩列

# 使用鏈?zhǔn)椒椒ㄔ黾佣嗔?/p>

df.assign(total=df.sum(1)) # 總成績(jī)

.assign(Q=100) # 目標(biāo)成績(jī)

.assign(name_len,name.str.len()) # 姓名長(zhǎng)度

.assign(avg=df.mean(1)) # 平均值

.assign(avg2=lambda d : d.total/4)# 平均值2

df.eval() 可以以字符表達(dá)式,增加列數(shù)

df.eval('total = Q1+Q2+Q3+Q4')  # 返回DataFrame

a = df.Q1.mean()

df.eval('C3=`Q3`+@a') # 使用變量

df.eval('C4 = name+team',inplace=True) #立即生效

增加行

可以使用loc[]指定索引給出所有列的值來(lái)增加一行數(shù)據(jù)。

df.loc[100] = ['tom','A',80,81,83,88] # 新增索引為100的數(shù)據(jù),指定全列的值

df.loc[101] = {'Q1':89,'Q2':99} # 指定列,無(wú)數(shù)據(jù)的值為NaN

df.loc[df.shape[0]+1] = {'Q1':89,'Q2':99} # 自動(dòng)增加索引

df.loc[len(df)+1] = {'Q1':89,'Q2':99} # 同上

df.append() 可以追加一個(gè)新行

df = pd.DataFrame([[1,2],[3,4]],columns=list('AB'))

df2 = pd.DataFrame([[5,6],[7,8]],columns=list('AB'))

df.append(df2) # 返回一個(gè)新的DataFrame

刪除

刪除有兩種方法,一種是使用pop()函數(shù)(DataFrame 和 Series都支持,刪除操作是事實(shí)生效的),返回刪除的數(shù)據(jù)

s.pop(3) #刪除索引為3的數(shù)據(jù),返回索引對(duì)應(yīng)的數(shù)值

df.pop('Q1') #刪除Q列,返回Serices

另外一種方法是使用反選法,將需要的數(shù)據(jù)篩選出來(lái)賦值給原變量。

在一些情況下會(huì)刪除有空值、缺失不全的數(shù)據(jù),df.dropna 可以執(zhí)行這種操作

df.dropna() # 刪除有缺失值de行(只要有空值,就刪除)

df.dropna(axis='columns') # 刪除有缺失值的列(只要有空值,就刪除)

df.dropna(how='all',inplace=True) # 行或列全是空值的刪除,inplace=True表示立即生效

df.dropna(thresh=2,axis=0) # 不足兩個(gè)非空值是刪除

高級(jí)過(guò)濾

df.where()

df.where()中可以傳入一個(gè)布爾表達(dá)式、布爾值的Series/DataFrame、序列或者可調(diào)用的對(duì)象,然后與原數(shù)據(jù)多對(duì)比,返回一個(gè)行與列的索引與原數(shù)據(jù)相同的數(shù)據(jù),滿(mǎn)足條件的保留原值,不滿(mǎn)足條件的位置填充N(xiāo)aN。

df = df.select_dtypes(include='number') # 只保留數(shù)字類(lèi)型列

df.where(df > 70) # 數(shù)值大于70

# Q1 Q2 Q3 Q4

# 0 89.0 NaN NaN NaN

# 1 NaN NaN NaN NaN

# 2 NaN NaN NaN 84.0

# 3 93.0 96.0 71.0 78.0

# 4 NaN NaN NaN 86.0

# .. ... ... ... ...

df.where(lambda d: d.Q1>50) # Q1列大于50 傳入lambda

#.......

df.Q1.where(pd.Series([True]*3)) # 傳入布爾值Series,前三個(gè)為真

可以指定一個(gè)值或者算法替換NaN

df.where(df>=60,'不及格')

# Q1 Q2 Q3 Q4

# 0 89 不及格 不及格 64

# 1 不及格 不及格 不及格 不及格

# 2 不及格 60 不及格 84

# 3 93 96 71 78

# 4 65 不及格 61 86

# .. ... ... ... ...

# c 定義一個(gè)數(shù)是否為偶數(shù)的表達(dá)式

c = df%2 == 0

# 傳入c,為偶數(shù)顯示原值減去20后的相反數(shù)

df.where(~c,~(df -20))

np.where()

np.where()是NumPy的一個(gè)功能,雖然不是Pandas提供的,但可以彌補(bǔ)df.where()的不足。df.where()方法可以將滿(mǎn)足條件的值篩選出來(lái),將不滿(mǎn)足的值替換為另外一個(gè)值,但無(wú)法對(duì)滿(mǎn)足條件的值進(jìn)行替換,而np.where()實(shí)現(xiàn)了這種功能

np.where(df>=60,'合格','不合格') # 返回一個(gè)二維數(shù)組

# 讓df.where()z中的條件為假,從而應(yīng)用np.where()的結(jié)果

df.where(df == 99999,np.where(df>=60,'合格','不合格'))

df.assign(avg=df.mean(1)).assign(jg=lambda d:np.where(d.avg>=60,'是','否'))

df.mask()

與df.where()的用法基本相同,唯一的區(qū)別是df.mask()將滿(mǎn)足條件的位置填充為NaN

df.lookup()

語(yǔ)法為df.lookup(行標(biāo)簽,列標(biāo)簽),返回一個(gè)numpy.ndarray,標(biāo)簽必須是一個(gè)序列。

# 行列相同數(shù)量,返回一個(gè)array

df.lookup([1,3,4],['Q1','Q2','Q3'])

df.lookup([1],'Q1')

數(shù)據(jù)迭代

迭代Series

直接對(duì)Series使用for語(yǔ)句遍歷它的值:

for i in df.name:

print(i) # 打印出df.name中的條目

迭代索引和指定的多列,可以使用內(nèi)置zip函數(shù)

for i,n,q in zip(df.index,df.name,df.Q1):

print(i,n,q)

df.iterrows()

df.iterrows()生成一個(gè)可迭代對(duì)象,將DataFrame行為(索引,行數(shù)據(jù))組成Series數(shù)據(jù)對(duì)進(jìn)行迭代。

# 迭代,使用name、Q1數(shù)據(jù)

for index,row in df.iterrows():

# index 是索引(不一定是數(shù)字)

print(index,row['name'],row.Q1)

df.iterrows()是最常用、最方便的按行迭代方法

df.items()

df.items()和df.iteritems()功能相同,都是列迭代,返回Series對(duì)象(列)

for label,ser in df.items():

print(label) # 列名

print(ser[:3],end='\n') # 取前三個(gè)

直接對(duì)DataFrame迭代,會(huì)得到列名

for column in df:

print(column) # 列名

函數(shù)應(yīng)用

pipe():應(yīng)用在整個(gè)DataFrame或Series上apply():應(yīng)用在DataFrame的行或列中,默認(rèn)為列applymap():應(yīng)用在DataFrame的每個(gè)元素中map():應(yīng)用在Series或DataFrame的一列的每個(gè)元素中

pipe()

Pandas提供的pipe()叫做管道方法,可以讓分析過(guò)程標(biāo)準(zhǔn)化、流水化、達(dá)到服用目標(biāo)。DataFrame和Series都支持pipe()方法。語(yǔ)法結(jié)構(gòu):df.pipe(函數(shù)名,函數(shù)參數(shù)列表或字典),第一個(gè)參數(shù)為DataFrame、Series。

# 對(duì)df多重應(yīng)用多個(gè)函數(shù)

f(g(h(df),arg1=a),arg2=b,arg3=c)

# 用pipe可以把它們連接起來(lái)

df.pipe(h)

.pipe(q,arg1=a)

.pipe(f,arg2=b,arg3=c) # 鏈?zhǔn)椒椒?/p>

# 其中n是要加的值,為比傳參數(shù)

# 返回值必須為DataFrame

def add_mean(rdf,n):

df = rdf.copy()

df = df.loc[:,'Q1':'Q4'].applymap(lambda x:x+n)

df['avg'] = df.loc[:,'Q1':'Q4'].mean(1)

return df

# 調(diào)用

df.pipe(add_mean,100)

函數(shù)部分可以為lambda

# 篩選出Q1大于等于80且Q2大于等于90的數(shù)據(jù)

df.pipe(lambda df_,x,y:df_[(df_.Q1>=x) & (df_.Q2 >=y)],80,90)

apply()

apply()可以對(duì)DataFrame按行和列(默認(rèn))進(jìn)行行數(shù)處理,也支持Series。如果是Series,逐個(gè)傳入具體值,DataFrame逐行或逐列傳入。

# 將name全部變?yōu)樾?xiě)

df.name.apply(lambda x:x.lower())

## 列

# 去掉一個(gè)最高分和一個(gè)最低分,在計(jì)算出平均值

def my_mean(s):

max_min_ser = pd.Series([-s.max(),-s.min()])

return s.append(max_min_ser).sum()/(s.count()-2)

# 對(duì)數(shù)字列應(yīng)用函數(shù)

df.select_dtypes(include='number').apply(my_mean)

## 行 axis=1

df.select_dtypes(include='number').apply(lambda :x.sum()/x.count(),axis=1)

apply()可以應(yīng)用的函數(shù)類(lèi)型如下:

df.apply(func) #自定義

df.apply(max) # python 內(nèi)置函數(shù)

df.apply(lambda x:x*2) # lambda

df.apply(np.mean) # Numpy 等其他庫(kù)的函數(shù)

df.apply(pd.Series,first_valid_index) # pandas 自己的函數(shù)

applymap()

df.applymap()可以實(shí)現(xiàn)元素級(jí)函數(shù)應(yīng)用,即對(duì)DataFrame中所有的元素(不包括索引)應(yīng)用函數(shù)處理

def mylen(x):

return len(str(x))

df.applymap(lambda x: len(str(x)))

df.applymap(mylen) # 同上

map()

map()根據(jù)輸入對(duì)應(yīng)關(guān)系映射值返回最終數(shù)據(jù),用于Series對(duì)象或DataFrame對(duì)象的一列。傳入一個(gè)字典,鍵為原數(shù)據(jù)值,值為替換后的值。可以傳入一個(gè)函數(shù)(參數(shù)為Series的每個(gè)值)。還可以傳入一個(gè)字符格式化表達(dá)式來(lái)格式化數(shù)據(jù)內(nèi)容。

df.team.map({'A':'一班','B':'二班','C':'三班','D':'四班'}) # 枚舉替換

df.team.map('I am a {}'.format)

df.team.map('I am a {}'.format,na_action='ignore')

t=pd.Series({'six':6.,'seven':7.})

s.map(t)

# 應(yīng)用函數(shù)

def f(x):

return len(str(x))

df['name'].map(f)

agg()

agg()一般用于使用指定軸上的一項(xiàng)或多項(xiàng)操作進(jìn)行匯總,可以傳入一個(gè)函數(shù)或函數(shù)的字符,還可以用于列表的形式傳入多個(gè)函數(shù)

# 每列的最大值

df.agg('max')

# 將所有列聚合產(chǎn)生sum和min兩行

df.agg(['sum','min'])

# 序列多個(gè)聚合

df.agg({'Q1':['sum','min'],'Q2':['min','max']})

# 分組后聚合

df.groupby('team').agg('max')

df.Q1.agg(['sum','mean'])

def mymean(x):

return x.mean()

df.Q2.agg(['sum',mymean])

# 每列指定不同的聚合

df.agg(a=('Q1',max),

b=('Q2','min'),

c=('Q3',np.mean),

d=('Q4',lambda s:s.sum()+1))

# 按行聚合

df.loc[:,'Q1':].agg('mean',axis='columns')

# 利用pd.Series.add方法對(duì)所有數(shù)據(jù)加分,other是add方法的參數(shù)

df.loc[:,'Q1':].agg(pd.Series.add,other=10)

agg()的用法整體上與apply()極為相似

transform()

DataFrame或Series自身調(diào)用函數(shù)并返回一個(gè)與自身長(zhǎng)度相同的數(shù)據(jù)

df.transform(lambda x:x*2) # 應(yīng)用匿名函數(shù)

df.transform([np.sqrt,np.exp]) # 調(diào)用多個(gè)函數(shù)

df.transform([np.abs,lambda x:x+1])

df.transform({'A':np.abs,'B':lambda x:x+1})

df.transform('abs')

df.transform(lambda x:x.abs())

copy()

類(lèi)似于Python中copy()函數(shù),df.copy()方法可以返回一個(gè)新對(duì)象,這個(gè)新對(duì)象與原對(duì)象沒(méi)有關(guān)系。

當(dāng)deep=False(默認(rèn)是True)時(shí),將創(chuàng)建一個(gè)對(duì)象而不復(fù)制調(diào)用對(duì)象的數(shù)據(jù)或索引(僅復(fù)制對(duì)數(shù)據(jù)和索引的引用)。原始數(shù)據(jù)的任何更改都將對(duì)淺拷貝的副本進(jìn)行同步修改,反之亦然。

柚子快報(bào)邀請(qǐng)碼778899分享:pandas 04

http://yzkb.51969.com/

相關(guān)鏈接

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19734632.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄