Pandas是什么顽馋?
1谓厘、一個(gè)強(qiáng)大的分析 結(jié)構(gòu)化數(shù)據(jù) 的工具集
2、基礎(chǔ)是NumPy寸谜,提供了 高性能矩陣 的運(yùn)算
3竟稳、應(yīng)用在數(shù)學(xué)挖掘,數(shù)據(jù)分析熊痴。比如他爸,學(xué)生成績(jī)分析,股票數(shù)據(jù)分析等
4果善、提供數(shù)據(jù)清洗功能
#使用
import pandas as pd
Pands數(shù)據(jù)結(jié)構(gòu)诊笤,主要分為兩種,Series和DataFrame
Series? ? ? ? ? ? ?視頻資料學(xué)習(xí)分享? 企(Q)鵝群? ? 519970686
1岭埠、類似一維數(shù)組的對(duì)象
2盏混、通過(guò)list構(gòu)建Series
ser_obj = pd.Series(rang(10))
3、由數(shù)據(jù)和索引組成
索引在左惜论,數(shù)據(jù)在右
索引是自動(dòng)創(chuàng)建的
4许赃、獲取數(shù)據(jù)和索引
ser_obj.index
ser_obj.values
5、預(yù)覽數(shù)據(jù)(取前幾個(gè))
ser_obj.head(n)
6馆类、通過(guò)索引獲取數(shù)據(jù)
ser_obj[1]
ser_obj[8]
7混聊、索引與數(shù)據(jù)的對(duì)應(yīng)關(guān)系仍保持在數(shù)組運(yùn)算的結(jié)果中(過(guò)濾series中的數(shù)據(jù))
print(ser_obj[ser_obj > 15])
8、通過(guò)dict構(gòu)建Series
year_data = {2001: 17.8, 2002: 20.1, 2003: 16.5}
ser_obj2 = pd.Series(year_data)
print(ser_obj2.head())
print(ser_obj2.index)
ser_obj2.name = 'temp'
#指定name名稱(相當(dāng)于表頭)
ser_obj2.index.name = 'year'
print(ser_obj2.head())
=================================
2001 17.8
2002 20.1
2003 16.5
dtype: float64
Int64Index([2001, 2002, 2003], dtype='int64')
year
2001 17.8
2002 20.1
2003 16.5
Name: temp, dtype: float64
DataFrame
1乾巧、類似多維數(shù)組/表格數(shù)據(jù)
2句喜、每列數(shù)據(jù)可以是不同的類型
3、索引包括行索引和列索引
import numpy as np
# 通過(guò)ndarray構(gòu)建DataFrame
array = np.random.randn(5,4)
print(array)
df_obj = pd.DataFrame(array)
print(df_obj)
# 通過(guò)dict構(gòu)建DataFrame
dict_data = {'A': 1.,
'B': pd.Timestamp('20161217'),
'C': pd.Series(1, index=list(range(4)),dtype='float32'),
'D': np.array([3] * 4,dtype='int32'),
'E' : pd.Categorical(["Python","Java","C++","C#"]),
'F' : 'ChinaHadoop' }
#print dict_data
df_obj2 = pd.DataFrame(dict_data)
print(df_obj2.head())
# 通過(guò)列索引獲取列數(shù)據(jù)(dataFrame優(yōu)先通過(guò)列索引訪問(wèn)數(shù)據(jù))
print(df_obj2['A'])
#通過(guò)索引訪問(wèn)數(shù)據(jù)
print(df_obj2.values[2])
#每列都是一個(gè)series
print(type(df_obj2['A']))
#通過(guò)對(duì)象屬性訪問(wèn)
print(df_obj2.A)
# 增加列沟于,類似dict添加key-value
df_obj2['G'] = df_obj2['D'] + 4
print(df_obj2.head())
# 刪除列
del(df_obj2['G'] )
print(df_obj2.head())
Index 索引對(duì)象? ? ? ? ???視頻資料學(xué)習(xí)分享? 企(Q)鵝群? ? 519970686
1咳胃、Series和DataFrame中的索引都是Index對(duì)象
2、Index具有不可變性(immutable)旷太,即Series和DataFrame中的value可以改變展懈,但是索引不可變,保證了數(shù)據(jù)的安全
3供璧、常見(jiàn)的Index種類
Index Int64Index MultiIndex(層級(jí)索引) DatatimeIndex(時(shí)間戳類型)
print(type(ser_obj.index))
print(type(df_obj2.index))
print(df_obj2.index)
=====================================
Int64Index([0, 1, 2, 3], dtype='int64')
Series數(shù)據(jù)操作
import pandas as pd
#index,指定索引名稱
ser_obj = pd.Series(range(5), index = ['a', 'b', 'c', 'd', 'e'])
print(ser_obj.head())
# 通過(guò)索引取值 ser_obj['label'],ser_obj[pos]
print(ser_obj['a']) //通過(guò)索引名取值
print(ser_obj[0]) //通過(guò)位置索引取值
# 切片索引
print(ser_obj[1:3]) // 前開(kāi)后閉存崖,即,取到兩個(gè)值
print(ser_obj['b':'d']) //前閉后閉睡毒,即来惧,取到三個(gè)值
# 不連續(xù)索引
print(ser_obj[[0, 2, 4]]) // 內(nèi)部是list
print(ser_obj[['a', 'e']]) //內(nèi)部是list
# 布爾索引
ser_bool = ser_obj > 2
print(ser_bool)
print(ser_obj[ser_bool])
print(ser_obj[ser_obj > 2])
DataFrame數(shù)據(jù)操作
import numpy as np
# colmns 指定列名
df_obj = pd.DataFrame(np.random.randn(5,4), columns = ['a', 'b', 'c', 'd'])
print(df_obj.head())
# 列索引
print('列索引')
print(df_obj['a']) # 返回Series類型
print(type(df_obj)) # 返回DataFrame類型
# 不連續(xù)索引
print('不連續(xù)索引')
print(df_obj[['a','c']]) # 返回第一列和第三列
索引操作總結(jié)
Pandas的索引操作可歸納為3種
.loc:標(biāo)簽索引(標(biāo)簽的切片索引是包含末尾位置的,上面的前閉后閉)
.iloc: 位置索引
.ix: 標(biāo)簽與位置混合索引
-------------先按標(biāo)簽索引嘗試操作演顾,然后再按照位置索引嘗試操作
# 標(biāo)簽索引 loc
# Series
print(ser_obj['b':'d'])
print(ser_obj.loc['b':'d'])
# DataFrame
print(df_obj['a'])
print(df_obj.loc[0:2, 'a'])
# 整型位置索引 iloc
print(ser_obj[1:3])
print(ser_obj.iloc[1:3])
# DataFrame
第一個(gè)參數(shù)供搀,表示的是第1行和第二行隅居,第二個(gè)0表示的哪一列
print(df_obj.iloc[0:2, 0]) # 注意和df_obj.loc[0:2, 'a']的區(qū)別
運(yùn)算與對(duì)齊
按索引對(duì)齊運(yùn)算,沒(méi)對(duì)齊的位置補(bǔ)NaN
s1 = pd.Series(range(10, 20), index = range(10))
s2 = pd.Series(range(20, 25), index = range(5))
# Series 對(duì)齊運(yùn)算,Series按行索引對(duì)齊葛虐,沒(méi)對(duì)齊的位置補(bǔ)NaN
print(s1 + s2)
==================================================
0 30.0
1 32.0
2 34.0
3 36.0
4 38.0
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
================================================
import numpy as np
df1 = pd.DataFrame(np.ones((2,2)), columns = ['a', 'b'])
df2 = pd.DataFrame(np.ones((3,3)), columns = ['a', 'b', 'c'])
# DataFrame對(duì)齊操作
print(df1 + df2)
=============================
a b c
0 2.0 2.0 NaN
1 2.0 2.0 NaN
2 NaN NaN NaN
================================
# 填充未對(duì)齊的數(shù)據(jù)進(jìn)行運(yùn)算
#使用add,sub,div,mul军浆;同時(shí)通過(guò)fill_value指定填充值
s1.add(s2, fill_value = 1)
df1.sub(df2, fill_value = 2.)
# 填充NaN
s3 = s1 + s2
s3_filled = s3.fillna(-1)//把所有的NaN使用-1填充
df3 = df1 + df2
df3.fillna(100, inplace = True)//把所有的NaN使用100填充
函數(shù)應(yīng)用
# Numpy ufunc 函數(shù)
df = pd.DataFrame(np.random.randn(5,4) - 1)
#求絕對(duì)值,作用于df中每個(gè)數(shù)據(jù)
print(np.abs(df))
# 使用apply應(yīng)用行或列數(shù)據(jù)
#如果沒(méi)有指定axis方向挡闰,默認(rèn)按列乒融,axis =0
print(df.apply(lambda x : x.max()))
# 指定軸方向
print(df.apply(lambda x : x.max(), axis=1))
# 使用applymap應(yīng)用到每個(gè)數(shù)據(jù)
f2 = lambda x : '%.2f' % x
print(df.applymap(f2))
排序
s4 = pd.Series(range(10, 15), index = np.random.randint(5, size=5))
# 索引排序
s4.sort_index()
df4 = pd.DataFrame(np.random.randn(3, 4),
index=np.random.randint(3, size=3),
columns=np.random.randint(4, size=4))
df4.sort_index(axis=1)
# 按值排序 sort_values(by='label')
df4.sort_values(by=1)
處理缺失數(shù)據(jù)? ? ? ? ? ??視頻資料學(xué)習(xí)分享? 企(Q)鵝群? ? 519970686
import numpy as np
df_data = pd.DataFrame([np.random.randn(3), [1., np.nan, np.nan],
[4., np.nan, np.nan], [1., np.nan, 2.]])
df_data.head()
# isnull
df_data.isnull()
# dropna 丟棄缺失數(shù)據(jù)
df_data.dropna()
#df_data.dropna(axis=1)
# fillna 填充缺失數(shù)據(jù)
df_data.fillna(-100.)