《利用Python進行數據分析》學習

一、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的方法和屬性:
  1. append
  2. diff:計算差集
  3. intersection
  4. union
  5. isin
  6. delete
  7. drop
  8. insert
  9. is_monotonic
  10. is_unique
  11. 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的索引選項:

  1. obj[val]:選取dataframe的單個列或一組列
  2. obj.ix[val]:選取dataframe的單個行或一組行
  3. obj.ix[:,val]:選取單個列或列子集
  4. obj.ix[val1,val2]:同時選取行和列
  5. reindex方法:將一個或多個軸匹配到新索引
  6. xs方法:根據標籤選取單行或單列,並返回一個Series
  7. icol、irow方法:根據證書位置選取單列或單行,並返回一個Series
  8. 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()  #一次性產生多個彙總統計

描述統計相關方法:

  1. count
  2. describe
  3. min, max
  4. argmin, argmax:計算能夠獲取到最小值和最大值的索引位置(整數)
  5. idxmax, idxmin:計算能夠獲取到最小值和最大值的索引值
  6. quantile:計算樣本的分位數
  7. sum
  8. mean
  9. median
  10. mad
  11. var
  12. std
  13. skew
  14. kurt
  15. cumsum
  16. cummin, cummax
  17. cumprod:累計積
  18. diff:一階差分
  19. 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:層次化索引的級別會被轉移到列裏面

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章