一、Series
- 利用列表創建Series
obj = Series([4,7,-5,3],index = ['d','b','a','c'])
- 利用字典創建Series:鍵爲索引
- 利用values和index屬性獲取值和索引
obj.values
obj.index
- 對Series進行Numpy數組運算,都會保留索引和值之間的鏈接
'b' in obj
#檢測缺失數據
pd.isnull()
pd.notnull()
#Series的方法
obj.isnull()
obj.notnull()
- Series在算術運算中會自動對齊不同索引的數據
- Series對象本身及其索引都有一個name屬性
obj.name = 'adj'
obj.index.name = 'state'
#Series的索引可以通過賦值的方式就地修改
obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']
二、DataFrame
構建方法:
- 直接傳入一個由等長列表或NumPy數組組成的字典,每一列是一個鍵值對
frame2 = DataFrame(data,columns = ['year','state','pop','debt'],index = ['one', 'two','three','four','five'])
#data是一個字典
frame2.columns
- 通過類似字典標記或屬性的方式,可以將DataFrame的列獲取爲一個Series
frame2['state']
frame2.year
- 列可以通過賦值的方式進行修改;也可以用Series對DataFrame進行賦值,索引會精確匹配,而所有空位將被填上缺失值
- 關鍵字del用於刪除列;屬性
del frame2['eastern']
frame2.T #轉置
frame3.index.name
frame3.columns.name
frame3.values
- 嵌套字典:外層字典的鍵作爲列,內層鍵則作爲行索引
- 索引對象;index對象是不可修改的
obj.index
index = pd.Index(np.arange(3))
- index的方法和屬性:
- append
- diff:計算差集
- intersection
- union
- isin
- delete
- drop
- insert
- is_monotonic
- is_unique
- unique
- 重新索引
s1.reindex(索引列表,fill_value = ..,method = 'ffill'/'bfill') #Series重新索引
d1.reindex(index = ['a','b','c','d',method = 'ffill',columns = ...) #重新索引行、列
frame.ix[['a','b','c','d'],list1]
- 丟棄指定軸上的項
new_obj = obj.drop('d','c'] #返回一個新對象
- 索引、選取和過濾
利用標籤的切片運算和普通的Python切片運算不同,其末端是包含的
obj['b':'c']
data.ix[:,'b']
DataFrame的索引選項:
- obj[val]:選取dataframe的單個列或一組列
- obj.ix[val]:選取dataframe的單個行或一組行
- obj.ix[:,val]:選取單個列或列子集
- obj.ix[val1,val2]:同時選取行和列
- reindex方法:將一個或多個軸匹配到新索引
- xs方法:根據標籤選取單行或單列,並返回一個Series
- icol、irow方法:根據證書位置選取單列或單行,並返回一個Series
- get_value、set_value方法:根據行標籤和列標籤選取單個值
- 算術運算和數據對齊
- 在算術方法中填充值
df1+df2
df1.add/sub/div/mul(df2,fill_value=0)
- DataFrame和Series之間的運算
默認情況下,dataframe和series之間的算術運算會將series的索引匹配到dataframe的列,然後沿着行一直向下廣播;如果你希望匹配行且在列上廣播,則必須使用算術運算方法。eg:frame.sub(series,axis=0),傳入的軸號就是希望匹配的軸。
- 函數應用和映射
Numpy的ufuncs(元素級數組方法)也可用於操作pandas對象
np.abs(frame)
另一個常見的操作是,將函數應用到各列或行所形成的的一維數組上。DataFrame的apply方法即可實現此功能。
f = lambda x: x.max() - x.min()
frame.apply(x)
- 排序和排名
對行或列索引進行排序,可用sort_index方法,返回一個新對象
若要按值對Series進行排序,可使用其order方法
若要按列值對Dataframe進行排序,將列名傳遞給by參數即可
DataFrame可以在行或列上計算排名 df.rank()
- 帶有重複值的軸索引
obj.index.is_unique
- 彙總和計算描述統計
df.sum()
df.sum(axis=1) #NA值會自動被排除,或用skipna=FALSE。axis代表約簡的軸
df.idmax() #返回的是間接統計(達到最大值的索引)
df.cumsum() #累計型
df.describe() #一次性產生多個彙總統計
描述統計相關方法:
- count
- describe
- min, max
- argmin, argmax:計算能夠獲取到最小值和最大值的索引位置(整數)
- idxmax, idxmin:計算能夠獲取到最小值和最大值的索引值
- quantile:計算樣本的分位數
- sum
- mean
- median
- mad
- var
- std
- skew
- kurt
- cumsum
- cummin, cummax
- cumprod:累計積
- diff:一階差分
- pct_change:計算百分數變化
- 相關係數與協方差
Series的corr方法用於計算兩個Series中重疊的、非NA的、按索引對齊的值的相關係數;與此類似,cov用於計算協方差:
df1.col1.corr(df1.col2)
DataFrame的corr和cov方法將以DataFrame的形式返回完整的相關係數或協方差矩陣
df1.corr()
df1.corrwith(df2.col1)
- 唯一值、值計數以及成員資格
unique1 = s1.unique().sort()
- s1.value_counts() #value_counts()用於計算一個Series中各值出現的頻率
#value還是一個頂級的pandas方法,可用於任何數組和序列
pd.value_counts(obj.values, sort=False)
s1.isin(['b','c'])
result = data.apply(pd.value_counts).fillna(0)
- 處理缺失數據
pandas使用浮點值NaN表示浮點和非浮點數組中的缺失數據
string_data.isnull()
NA處理方法:
dropna:根據各標籤的值中是否存在缺失數據對軸標籤進行過濾,可通過閾值調節對缺失值的容忍度
fillna, isnull, notnull
- 濾除缺失數據
s1.dropna() #對於一個Series,dropna返回一個僅含非空數據和索引值的Series
df1.dropna(axis=...) #對於一個DataFrame,dropna默認丟棄任何含有缺失值的行
- 填充缺失數據
df.fillna(0) #fillna默認返回新對象
df.fillna({1:0.5,3:-1) #通過字典調用fillna,實現對不同的列填充不同的值
- 層次化索引--在一個軸上擁有多個索引級別
層次化索引在數據重塑和基於分組的操作中很重要
df1.unstack()
df1.unstack().stack()
df1.index.names =
df1.columns.names =
MultiIndex.from_arrays([['Ohio','Ohio','Colorado'],['Green','Red','Green']],names = ['state','color']) #可以單獨創建MultiIndex然後複用
- 重排分級順序
df1.swaplevel('key1','key2') #重新調整某條軸上各級別的順序
df1.sortlevel(1) #根據單個級別中的值對數據進行排序
- 根據級別彙總統計
frame.sum(leve = 'color', axis = 1) #level用於指定在某條軸上求和的級別
- 使用DataFrame的列
frame2 = frame.set_index(['c','d']) #將其一個或多個列轉換爲行索引,並創建一個新的 DataFrame
frame.reset_index() #reset_index:層次化索引的級別會被轉移到列裏面