pandas DataFrame和Series
Pandas入門—Series和DataFrame
概述:pandas含有使數據分析工作變得更快更簡單的高級數據結構和操作工具,pandas是基於Numpy構建的。pandas在過去的幾年中逐漸成長為一個非常強大的庫。
pandas的數據結構介紹
引入pandas
>>> from pandas import Series,DataFrame
>>> import pandas as pd
pandas有兩個主要的數據結構:Series和DataFrame.
Series
Series是一種類似於一維數組的對象,它由一組數據(各種Numpy數據類型)以及一組與之相關的數據標簽(即索引)組成。僅由一組數據即可產生最簡單的Series:
>>> obj = Series([4,7,-5,3])
>>> obj
0 4
1 7
2 -5
3 3
dtype: int64
Series的字符串表現形式為:索引在左邊,值在右邊。你可以通過Series的values和index屬性獲取其數組表現形式和索引對象:
>>> obj.values
array([ 4, 7, -5, 3], dtype=int64)
>>> obj.index
RangeIndex(start=0, stop=4, step=1)
通常,我們希望所創建的Series帶有一個可以對各個數據點進行標記的索引:
>>> obj2 = Series([4,7,-5,3],index=[‘d‘,‘b‘,‘a‘,‘c‘])
>>> obj2
d 4
b 7
a -5
c 3
dtype: int64
與普通的Numpy相比,你可以通過索引的方式選取Series的單個或者一組值
>>> obj2[‘a‘]
-5
>>> obj2[[‘a‘,‘b‘]] #註意這裏是雙層[]
a -5
b 7
dtype: int64
Numpy數組運算都會保留索引和值之間的鏈接。
>>> obj2 * 2 d 8 b 14 a -10 c 6
還可以將Series看成是定長的有序字典,因為它是索引值到數據值的一個映射。
>>> ‘b‘ in obj2
True
如果數據存放在Python字典中,可以直接轉成Series:
>>> sdata = {‘test‘:1,‘hello‘:2}
>>> obj3 = Series(sdata)
>>> obj3
hello 2
test 1
dtype: int64
NaN(非數字),在pandas中,它代表缺失或NA值。使用缺失(missing)或NA表示缺失數據。pandas的isnull和notnull函數可以用於檢測缺失數據。
Series也有類似的方法。
>>> states = [‘test‘,‘haha‘]
>>> obj4 = Series(sdata,states)
>>> obj4
test 1.0
haha NaN
dtype: float64
>>> obj4.isnull()
test False
haha True
dtype: bool
Series的一個重要功能是:它在算術運算中會自動地對其不同索引的數據。
Series對象本身及索引都有一個name的屬性,該屬性跟pandas其他的關鍵功能關系非常密切。
>>> obj4.name = ‘sunpeng‘
>>> obj4.index.name = ‘llala‘
>>> obj4
llala
test 1.0
haha NaN
Name: sunpeng, dtype: float64
Series的索引也可以通過賦值的方式就地修改。
DataFrame
DataFrame是一個表格型的數據結構,它含有一組有序的列,每列可以是不同的值類型(數值、字符串、布爾型值)。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典(共同用一個索引)。和其他類似的數據結構相比,DataFrame中面向行和面向列的操作基本上是平衡的。其實,DataFrame中的數據是以一個或多個二維塊存放的(而不是列表、字典或別的數據結構)。
構建DataFrame的方法有很多,最常用的方法是直接傳入一個由等長列表或Numpy數組組成的字典:
>>> data = {‘state‘:[‘1‘,‘2‘],‘year‘:[‘a‘,‘b‘],‘pop‘:[‘x‘,‘y‘]}
>>> data
{‘state‘: [‘1‘, ‘2‘], ‘pop‘: [‘x‘, ‘y‘], ‘year‘: [‘a‘, ‘b‘]}
>>> frame = DataFrame(data)
>>> frame
pop state year
0 x 1 a
1 y 2 b
結果DataFrame會自動加上索引,且全部列會被有序排列。
如果指定了列順序,則DataFrame的列就會按照指定順序進行排列。
>>> DataFrame(data,columns=[‘year‘,‘pop‘,‘state‘])
year pop state
0 a x 1
1 b y 2
如果穿入的列在數據中找不到,就會產生NA值。
通過類似字典標記的方式或屬性的方式,可以講DataFrame的列獲取為一個Series。
pandas DataFrame和Series