第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Pandas 的算術(shù)運(yùn)算

1. 前言

上一節(jié)我們學(xué)習(xí)了 Pandas 對(duì)重復(fù)數(shù)據(jù)的處理,主要對(duì)重復(fù)數(shù)據(jù)的檢測(cè)和刪除重復(fù)數(shù)據(jù)。除了對(duì)數(shù)據(jù)的單獨(dú)處理操作,數(shù)據(jù)之間的運(yùn)算處理也是很有必要的,那 Pandas 中是否可以開(kāi)展數(shù)據(jù)之間的算術(shù)運(yùn)算呢?

Pandas 庫(kù)為方便數(shù)據(jù)處理,提供了強(qiáng)大而簡(jiǎn)潔的算術(shù)運(yùn)算操作,封裝了很多算術(shù)運(yùn)算的函數(shù)供使用,本節(jié)課我們將學(xué)習(xí) Pnadas 庫(kù)中提供的四種算術(shù)運(yùn)算操作函數(shù),包括 add (),sub (),div (),mul () 操作,因?yàn)?Series 和 DataFrame 之間的運(yùn)算比較有代表性,針對(duì)每一個(gè)算術(shù)運(yùn)算我們將以 Series 和 DataFrame 進(jìn)行運(yùn)算的實(shí)例進(jìn)行講解。

2. 概述

Pandas 庫(kù)中的算術(shù)運(yùn)算是數(shù)據(jù)集之間,根據(jù)索引進(jìn)行運(yùn)算的,如果存在不同的索引對(duì),運(yùn)算的結(jié)果是相同索引數(shù)據(jù)和不同索引數(shù)據(jù)的并集,并且用 NaN 填充運(yùn)算結(jié)果。

當(dāng)進(jìn)行對(duì)應(yīng)索引列之間的加減乘除運(yùn)算時(shí),要注意對(duì)應(yīng)索引列之間的類(lèi)型是否相同,如果不同類(lèi)型進(jìn)行運(yùn)算時(shí)會(huì)報(bào)類(lèi)型轉(zhuǎn)換錯(cuò)誤,同時(shí),要考慮到該類(lèi)型是否能進(jìn)行某種算術(shù)運(yùn)算,比如字符串之間的加法運(yùn)算是可以的,但是字符串之間是不存在減法、乘法和除法運(yùn)算的,否則會(huì)報(bào)錯(cuò)。

在正式講解各算術(shù)運(yùn)算之前,我們先將 DataFrame 數(shù)據(jù)對(duì)象,通過(guò) Excel 數(shù)據(jù)解析的方式進(jìn)行創(chuàng)建,針對(duì) Series 對(duì)象,在每次操作時(shí),根據(jù)需要我們單獨(dú)再創(chuàng)建。

# 導(dǎo)入pandas包
import pandas as pd
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第13小節(jié)/execl數(shù)據(jù)demo.xlsx"
# 解析數(shù)據(jù)
data = pd.read_excel(data_path)
print(data)

# --- DataFrame數(shù)據(jù)解析結(jié)果  ---
  編程語(yǔ)言   推出時(shí)間    價(jià)格                       主要?jiǎng)?chuàng)始人
0    java  199545.6               James Gosling
1  python  199167.0            Guido van Rossum
2       C  197233.9  Dennis MacAlistair Ritchie
3      js  199559.5                Brendan Eich
4     php  201269.9              Rasmus Lerdorf
5     C++  198375.0           Bjarne Stroustrup

3. add () 加法運(yùn)算

add () 函數(shù)根據(jù)索引值,對(duì)相同索引的數(shù)據(jù)進(jìn)行加法運(yùn)算,注意字符串的加法是拼接操作。

# 創(chuàng)建 Series 對(duì)象
new_series = pd.Series(["11","22",33,"44"], index=['編程語(yǔ)言','推出時(shí)間','價(jià)格','last'])
print(new_series)
# --- 輸出結(jié)果 ---
編程語(yǔ)言    11
推出時(shí)間    22
價(jià)格      33
last    44
dtype: object

# data 為從 Excel 解析出的 DataFrame 對(duì)象
# 通過(guò) add 函數(shù)進(jìn)行加運(yùn)算
new_result=data.add(new_series)
print(new_result)
# --- 輸出結(jié)果 ---
  last 主要?jiǎng)?chuàng)始人     價(jià)格     推出時(shí)間      編程語(yǔ)言
0  NaN   NaN   78.6  199522    java11
1  NaN   NaN    100  199122  python11
2  NaN   NaN   66.9  197222       C11
3  NaN   NaN   92.5  199522      js11
4  NaN   NaN  102.9  201222     php11
5  NaN   NaN    108  198322     C++11

輸出解析:new_series 對(duì)象中的 “l(fā)ast” 索引和 data 對(duì)象中 “主要?jiǎng)?chuàng)始人” 索引,他們之間不存在對(duì)應(yīng)關(guān)系,而其他的索引是一一對(duì)應(yīng)的,因此輸出結(jié)果其他的列均做了加法運(yùn)算 (字符串是拼接,數(shù)值是相加),而這兩列則單獨(dú)加入到結(jié)果集中,并且用 NaN 進(jìn)行填充。

如果我們的 Series 對(duì)象中的 “價(jià)格” 是字符型,在和 DataFrame 對(duì)象運(yùn)算過(guò)程中就會(huì)報(bào)類(lèi)型不匹配的錯(cuò)誤。

# 創(chuàng)建 Series 對(duì)象
new_series = pd.Series(["11","22","33","44"], index=['編程語(yǔ)言','推出時(shí)間','價(jià)格','last'])
print(new_series)
# --- 輸出結(jié)果 ---
編程語(yǔ)言    11
推出時(shí)間    22
價(jià)格      33
last    44
dtype: object
    
# data 為從 Excel 解析出的 DataFrame 對(duì)象
# 通過(guò) add 函數(shù)進(jìn)行加運(yùn)算
new_result=data.add(new_series)
print(new_result)
# --- 輸出結(jié)果 ---
……
TypeError: unsupported operand type(s) for +: 'float' and 'str'

輸出解析:因?yàn)槲覀兊牟僮魇窃?data 數(shù)據(jù)集中加上 new_series 數(shù)據(jù)集,在 Pandas 中 str 類(lèi)型加上任何類(lèi)型相當(dāng)于是字符串的拼接操作,而 int/float 類(lèi)型值加上字符串,Pandas 不支持該算術(shù)運(yùn)算,因此會(huì)報(bào)錯(cuò)。

4. sub () 減法運(yùn)算

sub () 函數(shù)用于數(shù)據(jù)集之間對(duì)應(yīng)索引的減法操作,該操作不同于加法操作,字符操作是不存在減法操作的,算術(shù)上的減法只用于數(shù)值類(lèi)型的數(shù)據(jù)運(yùn)算,包括整形、浮點(diǎn)型等。

# 創(chuàng)建 Series 對(duì)象
new_series = pd.Series(['11',33], index=['推出時(shí)間','價(jià)格'])
print(new_series)
# --- 輸出結(jié)果 ---
推出時(shí)間    11
價(jià)格      33
dtype: object

# data 為從 Excel 解析出的 DataFrame 對(duì)象
# 通過(guò) sub 函數(shù)進(jìn)行減法運(yùn)算
new_result=data.sub(new_series)
print(new_result)

# --- 輸出結(jié)果 ---
……
TypeError: unsupported operand type(s) for -: 'float' and 'str'
TypeError: unsupported operand type(s) for -: 'str' and 'str'

輸出解析:因?yàn)?pandas 中的 sub () 減法操作函數(shù)只在數(shù)值類(lèi)型的數(shù)據(jù)之間有效,因此在 數(shù)值和字符串型,以及字符串與字符串之間進(jìn)行 sub () 操作都會(huì)報(bào)錯(cuò)。

下面我們只對(duì)兩個(gè)數(shù)據(jù)集的價(jià)格索引了列進(jìn)行 sub () 操作。

# 創(chuàng)建 Series 對(duì)象
new_series = pd.Series([33], index=['價(jià)格'])
print(new_series)
# --- 輸出結(jié)果 ---
價(jià)格    33
dtype: int64

# data 為從 Excel 解析出的 DataFrame 對(duì)象
# 通過(guò) sub 函數(shù)進(jìn)行減法運(yùn)算
new_result=data.sub(new_series)
print(new_result)
# --- 輸出結(jié)果 ---
  主要?jiǎng)?chuàng)始人  價(jià)格 推出時(shí)間 編程語(yǔ)言
0   NaN     12.6  NaN  NaN
1   NaN     34.0  NaN  NaN
2   NaN     0.9   NaN  NaN
3   NaN     26.5  NaN  NaN
4   NaN     36.9  NaN  NaN
5   NaN     42.0  NaN  NaN

輸出解析:這里我們對(duì)兩個(gè)數(shù)據(jù)集的價(jià)格列進(jìn)行了相減操作,可以看到價(jià)格列的數(shù)據(jù)均減去了 33。

5. mul () 乘法運(yùn)算

mul () 操作是兩個(gè)數(shù)據(jù)集對(duì)應(yīng)索引列的數(shù)據(jù)進(jìn)行乘法運(yùn)算,該函數(shù)同樣只適用于兩個(gè)數(shù)值數(shù)據(jù)的運(yùn)算,字符串之間,字符串與數(shù)值之間進(jìn)行乘法運(yùn)算均會(huì)報(bào)錯(cuò)。

# 創(chuàng)建 Series 對(duì)象
new_series = pd.Series([3], index=['價(jià)格'])
print(new_series)
# --- 輸出結(jié)果 ---
價(jià)格    3
dtype: int64

# data 為從 Excel 解析出的 DataFrame 對(duì)象
# 通過(guò) mul 函數(shù)進(jìn)行乘法運(yùn)算
new_result=data.mul(new_series)
print(new_result)
# --- 輸出結(jié)果 ---
  主要?jiǎng)?chuàng)始人  價(jià)格 推出時(shí)間 編程語(yǔ)言
0   NaN  136.8  NaN  NaN
1   NaN  201.0  NaN  NaN
2   NaN  101.7  NaN  NaN
3   NaN  178.5  NaN  NaN
4   NaN  209.7  NaN  NaN
5   NaN  225.0  NaN  NaN

輸出解析:通過(guò)乘法操作函數(shù)對(duì)兩個(gè)數(shù)據(jù)集的價(jià)格列進(jìn)行操作,可以看到輸出結(jié)果中的價(jià)格均變?yōu)榱艘郧暗娜?,其他列?NaN 進(jìn)行填充。

6. div () 除法運(yùn)算

div () 函數(shù)用于兩個(gè)數(shù)據(jù)集對(duì)應(yīng)索引列的數(shù)據(jù)進(jìn)行除法運(yùn)算,該函數(shù)同樣只適用數(shù)值型數(shù)據(jù)之間的運(yùn)算,并且除數(shù)不能為 0 ,否則會(huì)報(bào)錯(cuò)。

# 創(chuàng)建 Series 對(duì)象
new_series = pd.Series([3,"fill"], index=['價(jià)格',"add_column"])
print(new_series)
# --- 輸出結(jié)果 ---
價(jià)格               3
add_column    fill
dtype: object

# data 為從 Excel 解析出的 DataFrame 對(duì)象
# 通過(guò) div 函數(shù)進(jìn)行除法運(yùn)算,除數(shù)不能為0
new_result=data.div(new_series)
print(new_result)    
# --- 輸出結(jié)果 ---
    add_column 主要?jiǎng)?chuàng)始人  價(jià)格 推出時(shí)間 編程語(yǔ)言
0        NaN   NaN     15.2  NaN  NaN
1        NaN   NaN  22.3333  NaN  NaN
2        NaN   NaN     11.3  NaN  NaN
3        NaN   NaN  19.8333  NaN  NaN
4        NaN   NaN     23.3  NaN  NaN
5        NaN   NaN       25  NaN  NaN

輸出解析:通過(guò) div () 函數(shù)進(jìn)行兩個(gè)數(shù)據(jù)集價(jià)格列的除法運(yùn)算,可以看到輸出結(jié)果原 data 集中的價(jià)格列數(shù)據(jù)均是除以 3 的結(jié)果,而其他的數(shù)列并入到結(jié)果集合中,并以 NaN 進(jìn)行填充。

下面是除數(shù)為 0 時(shí)出現(xiàn)的錯(cuò)誤結(jié)果:

# 創(chuàng)建 Series 對(duì)象
new_series = pd.Series([0,"fill"], index=['價(jià)格',"add_column"])
print(new_series)
# --- 輸出結(jié)果 ---
價(jià)格               0
add_column    fill
dtype: object

# data 為從 Excel 解析出的 DataFrame 對(duì)象
# 通過(guò) div 函數(shù)進(jìn)行除法運(yùn)算,除數(shù)不能為0
new_result=data.div(new_series)
print(new_result)
# --- 輸出結(jié)果 ---
……
ZeroDivisionError: float division by zero

3. 小結(jié)

本節(jié)課程我們主要學(xué)習(xí)了 Pandas 中數(shù)據(jù)集之間進(jìn)行的算術(shù)運(yùn)算操作,主要講解了加、減、乘、除四種操作,算術(shù)運(yùn)算并不是針對(duì)字符串類(lèi)型的數(shù)據(jù)(在字符串之間的加法操作相當(dāng)于是進(jìn)行拼接操作),而是專(zhuān)門(mén)用來(lái)處理數(shù)值型數(shù)據(jù)的,因此對(duì)于不同的操作需要,要清晰的知道應(yīng)該使用哪種操作函數(shù)去實(shí)現(xiàn)。本節(jié)課程的重點(diǎn)如下:

  • Pandas 庫(kù)算術(shù)運(yùn)算加減乘除四種操作對(duì)應(yīng)的操作函數(shù)的使用;
  • Pandas 庫(kù)算術(shù)運(yùn)算函數(shù)使用時(shí)常見(jiàn)的錯(cuò)誤原因;

圖片描述