天天看點

Pandas(一)資料結構和基本功能

Pandas通常是用于資料分析過程中, 資料的清洗, 資料預處理, 資料的描述性分析等過程中。在整個Python資料分析的生态環境中, Pandas的地位非常重要, 利用Pandas可以快速便捷的對資料進行各種各樣的處理與操作。可以說是更新版的Excel。Pandas是基于Numpy的一個資料分析包, 它裡面的核心是Numpy。

在Pandas中, 最重要的兩種資料結構是1維的Series和2維的DataFrame.

Series:一維數組,與Numpy中的一維array類似。Series中能儲存不同種資料類型,字元串、boolean值、數字等都能儲存在Series中。但是每個Series中隻能儲存一種資料結構.

DataFrame:二維的表格型資料結構。有多個Series共同構成的集合就變成DataFrame。

 一、Series

1.手動建構Series

data = np.array([22, 3000, 33, 37, 40, 1500])
data

test = pd.Series(data)
test      

還可以對Series進行一些拓展:

s = pd.Series(data ,name=\'英雄年齡\' , index= [\'蜘蛛俠\', \'滅霸\', \'奇異博士\', \'鋼鐵俠\', \'蝙蝠俠\', \'索爾\'])
s
      

2.Series的索引和切片

顯式索引-----字典索引

隐式索引-----清單索引

對于 Series 的索引和切片,我們可以有兩種思路,一種是把它當做是一個字典,索引就是字典的 key,資料就是字典的 value。

s[\'鋼鐵俠\']

s[\'滅霸\':\'鋼鐵俠\':2]
      

Series 除了像 dict 外,也非常像 ndarray,這也就意味着可以采用切片操作。

s[-1]

s[::2] = 100
      

如果想要更複雜的提取方式,可以直接采用索引值去進行資料的提取。同樣也分為:顯式索引和隐式索引。

s[ [0, 1, -1] ]

s[[\'蜘蛛俠\', \'滅霸\', \'索爾\'] ]
      

删除資料

df.pop()可以彈出指定資料

df.drop() 可以删除指定資料

3.廣播的方法

s + 1

np.log(s)

np.mean(s)

s.mean()
      

二、DataFrame

DataFrame 是一個帶有索引的二維資料結構,每列可以有自己的名字,并且可以有不同的資料類型。你可以把它想象成一個 excel 表格或者資料庫中的一張表,DataFrame 是最常用的 Pandas 對象。

1.建構DataFrame 

在建構 DataFrame 的時候,主要有兩種思路

  1. 資料為字典類的格式, 是以列的方式進行組織, 字典的 key 将會作為列名,字典的值value作為列的資料.
  2. 資料為清單類形式, 是以行的方式進行組織的, 列名需要用參數傳入進去.
#字典的方式傳入資料
data = {
    "年齡":[19, 3000, 30, 37, 40, 1500], 
    "城市":["紐約皇後區", "泰坦星球","費城", "紐約", "哥譚",  "阿斯加德" ],
    "裝備":[\'蜘蛛戰服\',\'無限手套\',\'披風\',\'動力裝甲\',\'蝙蝠戰衣\',\'雷神之錘\']
}
index = [\'蜘蛛俠\', \'滅霸\', \'奇異博士\', \'鋼鐵俠\', \'蝙蝠俠\', \'索爾\']

df = pd.DataFrame(data=data,index=index )
      
#清單的方式傳入資料
data = [
    [19, "紐約皇後區",\'蜘蛛戰服\'], 
    [3000, "泰坦星球",\'無限手套\'], 
    [30, "費城",\'披風\'], 
    [37, "紐約",\'動力裝甲\'], 
    [40, "哥譚",\'蝙蝠戰衣\'], 
    [1500, "阿斯加德",\'雷神之錘\']
]
data

df = pd.DataFrame(data, columns=[\'年齡\', \'城市\',\'裝備\'], index=index)
      

  也可以從本地磁盤讀取資料

2.DataFrame 的索引和切片

1)提取資料表中的列, 是最常用的操作之一, 是以這個操作也非常簡單.

df[\'年齡\']
      

2)在顯示索引中,把 DataFrame 的索引值當做第一個軸的 key,把列名當做第二個軸的 key

# 例如我現在想要滅霸的年齡,則需要通過行索引"滅霸" 和列索引"年齡" 去進行定位
df.loc[\'滅霸\',\'年齡\']
      

3)序列值索引

我們注意到, 上面的那種索引方式其實有一定的局限性, 如果想要索引的值并沒有規律的 步長, 恐怕就做不到了!

文法 

df.loc[索引行,索引列 ]

# 蜘蛛俠,滅霸, 蝙蝠俠的城市
df.loc[[ \'蜘蛛俠\',\'滅霸\',\'蝙蝠俠\'] , \'城市\']  # 顯式索引

# 兩個坐标軸都可以這樣做,而且不用考慮原資料的順序
# 奇異博士,鋼鐵俠和蜘蛛俠的年齡和城市資訊
df.loc[ [\'奇異博士\',\'鋼鐵俠\',\'蜘蛛俠\']  ,[\'年齡\',\'城市\'] ]
      

4)隐式索引

使用 

iloc

 也就是 

index_loc

這種方式不看你的行索引和列索引是什麼名稱,可以把資料當做是一個有序清單, 隻看資料是處于表中的一個什麼位置.

df.iloc[0::, 0::]
      

 3.新增/删除列

在生成了 DataFrame 之後,突然你發現好像缺失了使用者的性别這個資訊,如何添加呢?如果所有的性别都一樣,我們可以通過傳入一個标量,Pandas 會自動幫我們廣播來填充所有的位置。

# 使用顯示索引的方式進行添加
df.loc[\'黑寡婦\'] = [43,\'前蘇聯\',\'手槍\']

      
df[\'性别\'] = \'男\'  # 新增一列  性别
df
      

  

  4.掩碼提取資料

# 提取 30 - 100 之間的英雄
df[ (df.年齡 >= 30 )  & (df.年齡 <= 100)  ] 


# 年齡為偶數 或 城市為 紐約
df[ (df.年齡 % 2 == 0)  |    (df.城市 == \'紐約\') ]
      

  

重點:1. 建構Series 2. 索引和切片 3. 序列值索引  4. DataFrame 建構  5. 從本地讀取 read_csv , 寫入到本地 to_csv 6. DataFrame 的索引和切片

7. 檢視基本資訊 df.head  df.shape df.info() df.T  8. 掩碼提取資料