Series和DataFrame結(jié)構(gòu)
DataFrame
DataFrame數(shù)據(jù)結(jié)構(gòu)是一種二維的結(jié)構(gòu)。整個DataFrame包括三個部分:
- 索引(index)
- 表頭(column)
- 數(shù)值(data)
各列的數(shù)據(jù)類型可以不同。
Series
一維結(jié)構(gòu)升略,帶索引的一維數(shù)組,并且其中的數(shù)據(jù)類型一致唯灵。
DataFrame的任意一行或一列就是一個Series對象彤悔,比如我們通過.loc[0]
獲取到第一個樣本:
sampel = data.loc[0]
print (sample)
Series對象的表現(xiàn)形式為:索引在左,取值在右毡泻。
從DataFrame中得到的Series會自動分配兩個屬性:name
和dtype
。
對于輸出(print)的Series對象粘优,最后的Name:0
表示該樣本為第一個樣本仇味,dtype:object
表示數(shù)據(jù)類型為object
。
可以通過.index
和.values
取出Series數(shù)據(jù):
sample.index
sample.values
創(chuàng)建Series對象
最基本方式:
pd.Series(data,index=index)
其中data
可以為:
- 一個ndarray
- 一個Python字典
- 一個標量值
從ndarray創(chuàng)建
Pandas支持重復的索引值雹顺,index必須與data(ndarry)一樣長丹墨。
pd.Series(ndarry,index=['a','a','b','c'])
或者省略index,index會默認為整數(shù)0到n-1嬉愧,n為數(shù)據(jù)長度贩挣。
pd.Series(ndarry)
從字典創(chuàng)建
Python字典中的鍵:值
與Series中的索引:值
對應。所以可以直接轉(zhuǎn)換:
d={'a':0.12, 'b':0.33, 'c':-0.17}
pd.Series(d)
從標量創(chuàng)建
即用單個數(shù)值直接創(chuàng)建:
pd.Series(2,index=['a','b','c'])
Series對象的相關(guān)操作
數(shù)據(jù)索引與篩選
s=pd.Series(np.random.randn(4),index=['a','a','c','d'])
s[0]
#取第一個值
s[:2]
#取第1-3個值
s[[1,3]]
#取第1没酣,3個值
s[s<s.mean()]
s['a']
s[['c','d']]
'c' in s
#輸出:True
算術(shù)運算
s+3
#s的全部數(shù)值+3
np.abs(s)
#絕對值
在算術(shù)運算中王财,會自動通過index對齊數(shù)據(jù),然后分別對index相同的數(shù)據(jù)計算裕便。
唯一值與個數(shù)統(tǒng)計
unique()
:返回Series去重后的數(shù)組绒净。
values_counts()
:查看每一個元素(data)的頻數(shù)。
astype()
:類型轉(zhuǎn)換偿衰。如:
s1=s0.astype('float32')
Pandas包含的數(shù)據(jù)類型:
類型 | 說明 |
---|---|
object | 字符串或混合類型 |
int | 整型 |
float | 浮點型 |
datetime | 時間類型 |
bool | 布爾型 |
創(chuàng)建DataFrame對象
pd.DataFrame(data,index=index,columns=cloumns)
data允許為:
- 包含列表挂疆、字典或Series的字典
- 二維numpy.ndarray
- 一個Series
- 另一個DataFrame
從字典創(chuàng)建
d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
'two' : pd.Series([1., 2., 4.], index=['a', 'b', 'd'])}
df = pd.DataFrame(d)
從Series創(chuàng)建
s=pd.Series([1,2,3],index=['a','b','c'])
pd.DataFrame(s,columns=['first'])
DataFrame對象的相關(guān)操作
數(shù)據(jù)篩選
df[df['one'] > 1]
刪除和添加一列
df['three'] = df['one'] + df['two']
df['flag'] = df['one'] > 1
#
df.insert(1, 'bar', df['one'])
#在位置1插入與one包含相同數(shù)據(jù)的一列bar
del df['flag']
#
bar = df.pop('bar')
#刪除并將刪除的值賦給bar
修改列名
d = {'one':'first'}
df.rename(columns=d)
#將one改為first
DataFrame的顯示
DataFrame的顯示可以調(diào)用pd.set_option()
實現(xiàn)改览。
參數(shù) | 含義 |
---|---|
display.max_columns | 如果列數(shù)超過該值,則使用截斷瀏覽模式缤言,中間的部分樣本用省略號略過宝当,默認值為20 |
display.max_rows | 如果行數(shù)超過該值,則使用截斷瀏覽模式墨闲,中間的部分樣本用省略號略過今妄,默認值為60 |
df = pd.read_csv('loandata.csv')
pd.set_option('display.max_columns', 5)
pd.set_option('display.max_rows', 4)
#最大行數(shù)為4行,最大列數(shù)為5列情況下的截斷顯示
索引
索引方法:
操作 | 語法 | 結(jié)果 |
---|---|---|
選取某一列 | df[col] | Series |
通過標簽選取某一行/列 | df.loc[label] | Series |
通過位置(整數(shù)表示)獲取某一行/列 | df.iloc[loc] | Series |
通過切片方式獲取多行/列 | df[5:10] | DataFrame |
通過布爾向量獲取多行/列 | df[bool_vec] | DataFrame |
常用:
df.iloc[0]
#通過索引,得到一行的Series
df.loc['1','name']
#通過具體值