pandas库
pandas是基于NumPy數(shù)組構(gòu)建的,特別是基于數(shù)組的函數(shù)和不使用for循環(huán)的數(shù)據(jù)處理。雖然pandas采用了大量的NumPy編碼風(fēng)格,但二者最大的不同是pandas是專門為處理表格和混雜數(shù)據(jù)設(shè)計(jì)的。而NumPy更適合處理統(tǒng)一的數(shù)值數(shù)組數(shù)據(jù)。
要使用pandas,你首先就得熟悉它的兩個(gè)主要數(shù)據(jù)結(jié)構(gòu):Series和DataFrame。雖然它們并不能解決所有問題,但它們?yōu)榇蠖鄶?shù)應(yīng)用提供了一種可靠的、易于使用的基礎(chǔ)。
一、Series
Series是一種類似于一維數(shù)組的對象,它由一組數(shù)據(jù)(各種NumPy數(shù)據(jù)類型)以及一組與之相關(guān)的數(shù)據(jù)標(biāo)簽(即索引)組成。僅由一組數(shù)據(jù)即可產(chǎn)生最簡單的Series:
import pandas as pd obj = pd.Series([7,-2,3,4]) print(obj)
索引 值
0 7
1 -2
2 3
3 4
Series默認(rèn)索引是0至N-1,也可以指定索引值,方法如下:
obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
如果數(shù)據(jù)被存放在一個(gè)Python字典中,也可以直接通過這個(gè)字典來創(chuàng)建Series:
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj3 = pd.Series(sdata)
通過Series 的values和index屬性獲取其數(shù)組表示形式和索引對象:
print(obj.values) print(obj.index)
可以通過索引的方式選取Series中的單個(gè)或一組值:
obj2['a'] obj2[['c', 'a', 'd']]
還可以將Series看成是一個(gè)定長的有序字典,因?yàn)樗撬饕档綌?shù)據(jù)值的一個(gè)映射.
我將使用缺失(missing)或NA表示缺失數(shù)據(jù)。pandas的isnull和notnull函數(shù)可用于檢測缺失數(shù)據(jù):
print(pd.isnull(obj)) print(pd.notnull(obj))
Series也有類似的實(shí)例方法:
obj4.isnull()
Series最重要的一個(gè)功能是,它會根據(jù)運(yùn)算的索引標(biāo)簽自動(dòng)對齊數(shù)據(jù),可以認(rèn)為是類似數(shù)據(jù)庫的join的操作。
Series對象本身及其索引都有一個(gè)name屬性,該屬性跟pandas其他的關(guān)鍵功能關(guān)系非常密切。
obj4.name = 'population' obj4.index.name = 'state'
Series的索引可以通過賦值的方式就地修改:
obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']
二、DataFrame
DataFrame是一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu),它含有一組有序的列,每列可以是不同的值類型(數(shù)值、字符串、布爾值等)。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典(共用同一個(gè)索引)。DataFrame中的數(shù)據(jù)是以一個(gè)或多個(gè)二維塊存放的(而不是列表、字典或別的一維數(shù)據(jù)結(jié)構(gòu))。
(1)建DataFrame的辦法有很多,最常用的一種是直接傳入一個(gè)由等長列表或NumPy數(shù)組組成的字典:
#傳入字典
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
#傳入數(shù)組
frame2 = pd.DataFrame(np.range(18).reshape(3,6),
columns=['year', 'state', 'pop', 'debt'],
index=['one', 'two', 'three', 'four','five', 'six'])#如果傳入的列在數(shù)據(jù)中找不到,就會在結(jié)果中產(chǎn)生缺失值:
#嵌套字典創(chuàng)建DataFrame
pop = {'Nevada': {2001: 2.4, 2002: 2.9}, 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame3 = pd.DataFrame(pop)#外層字典的鍵作為列,內(nèi)層鍵則作為行索引。
參數(shù):
cloumns:指定列名,并按列名順序排列。
index:指定索引
dtype:指定數(shù)據(jù)類型
常用函數(shù)總結(jié):
frame.head()#選取前五行
frame.T#轉(zhuǎn)置
frame.index.name = 'year'#設(shè)置index的name屬性
frame.columns.name = 'state'#設(shè)置columns的name屬性
frame.values#選取DataFrame的值,結(jié)果為二維數(shù)組。
選取DataFrame數(shù)據(jù):
#兩種方式選取state列數(shù)據(jù) frame2['state'] frame2.state frame2['debt'] = 16.5#列可以通過賦值的方式進(jìn)行修改。 #行數(shù)據(jù)選取 frame2.loc['three']
將列表或數(shù)組賦值給某個(gè)列時(shí),其長度必須跟DataFrame的長度相匹配。如果賦值的是一個(gè)Series,就會精確匹配DataFrame的索引,所有的空位都將被填上缺失值。
val = pd.Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five']) frame2['debt'] = val print(frame2) #為不存在的列賦值會創(chuàng)建出一個(gè)新列。關(guān)鍵字del用于刪除列。 frame2['eastern'] = frame2.state == 'Ohio' del frame2['eastern']
總結(jié)
- 上一篇: 华为荣耀8哪种颜色好看 华为荣耀8五种颜
- 下一篇: iphone拍照技巧介绍 教你如何拍出单