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 的時候,主要有兩種思路
- 資料為字典類的格式, 是以列的方式進行組織, 字典的 key 将會作為列名,字典的值value作為列的資料.
- 資料為清單類形式, 是以行的方式進行組織的, 列名需要用參數傳入進去.
#字典的方式傳入資料
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. 掩碼提取資料