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