pandas中的Series和DataFrame的區別與轉化

1.series數據類型

1. Series相當於數組numpy.array類似

Series 它是有索引,如果我們未指定索引,則是以數字自動生成。

obj=Series([4,7,-5,3])
 print obj
#輸出結果如下:
0    4
1    7
2   -5
3    3

如果數據被存在一個python字典中,也可以直接通過這個字典來創建Series.

sdata{'Ohio':35000,'Texax':71000,'Oregon':16000,'Utah':5000}
obj3=Series(sdata)
print obj3
#輸出結果如下:
#Ohio      35000
#Oregon    16000
#Texax     71000
#Utah       5000

2. Series操作

取值

print obj.values 
#[ 4  7 -5  3]

根據索引取值

obj2=Series([4,7,-5,3],index=['d','b','a','c'])
print obj2['a'] #輸出結果:-5

2.1 Series.order()進行排序,而DataFrame則用sort或者sort_index

2.2 Series使用isnull來檢測是否缺失數據

print pd.isnull(obj4)
#輸出結果如下:
#California     True
#Ohio          False
#Oregon        False
#Texax         False
#dtype: bool

2.3 Series最重要的一個功能是:它在算術運算中會自動對齊不同索引的數據。

print obj3,obj4
#Ohio      35000
#Oregon    16000
#Texax     71000
#Utah       5000
#dtype: int64
#
#California        NaN
#Ohio          35000.0
#Oregon        16000.0
#Texax         71000.0
#dtype: float64
print  obj3+obj4
#California         NaN
#Ohio           70000.0
#Oregon         32000.0
#Texax         142000.0
#Utah               NaN
#dtype: float64

2.4 Series的索引可以通過賦值的方式就地修改

obj2.index=['Bob','Steven','Jeff','Ryan']
print obj2
#輸出結果如下:
# Bob       4
# Steven    7
# Jeff     -5
# Ryan      3
# dtype: int64
obj2['Bob']=15
print obj2
#輸出結果如下:
# Bob       15
# Steven     7
# Jeff      -5
# Ryan       3
# dtype: int64
print obj2['Bob'].values #沒有這種表示法,報錯。因爲類似字典取值,直接取鍵值即可

3.DataFrame數據類型

DataFrame相當於有表格,有行表頭和列表頭

a=pd.DataFrame(np.random.rand(4,5),index=list("ABCD"),columns=list('abcde'))

在這裏插入圖片描述
構建DataFrame 的方法很多,最常用的一種是直接傳入一個由等長列表或者Numpy數組組成的字典

import numpy as np
from numpy import random
import matplotlib.pyplot as plt
from numpy.linalg import inv,qr
from pandas import Series,DataFrame
import pandas as pd
data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
      'year':[2000,2001,2002,2001,2002],
      'pop':[1.5,1.7,3.6,2.4,2.9]}
frame=DataFrame(data)
print (frame)

輸出結果爲
#year state pop
#0 2000 Ohio 1.5
#1 2001 Ohio 1.7
#2 2002 Ohio 3.6
#3 2001 Nevada 2.4
#4 2002 Nevada 2.9

5.DataFrame的操作

5.1 增加列或修改列

a['f']=[1,2,3,4]

在這裏插入圖片描述

5.2 增加行或修改行

a.ix['D']=10

在這裏插入圖片描述
5.3 合併兩個DataFrame

S=pd.DataFrame(np.random.rand(4,6),index=list('EFGH'),columns=list('abcdef'))
a=a.append(S)

在這裏插入圖片描述
5.4 減少行或減少列

a=a.drop(['C','D']) #刪除'C'行和'D'
a=a.drop('a',axis=1) #刪除'a'列,
axis=0表示行,axis=1表示列

5.5 缺省值處理

a.iloc[2,3]=None #取第三行第4列值設爲None
a.iloc[4,0]=None #取第五行第1列值設爲None
a=a.fillna(5)  #缺省值處(即NaN處填充爲5)

5.6 缺省值去行即有缺省值的把這一行都去掉

a.iloc[2,3]=None
a.iloc[4,0]=None
a=a.dropna() #刪除缺省值爲NaN的行

5.7 讀取excel,適當改動後,保存到excel中

e1=pd.read_excel('test.xlsx',sheetname='Sheet1')
e1.columns=['class','no','name','sex','dormitory','phonenumber']
print(e1)
print(e1.ix[2])
print(e1['class'])
print(e1.sex)

5.8 可將取出的數據處理,處理完後再保存到excel中去

e2=pd.read_excel('test_copy.xlsx',sheetname='Sheet1',names='table1',header=None)
e2.columns=['a','b','c','d']
print(e2)
e2.to_excel('test_write.xlsx',header=False,index=False)

5.9 輸出列的索引
print frame2.columns
#輸出結果如下:
#Index([u’year’, u’state’, u’pop’, u’debt’], dtype=‘object’)

6.DataFrame和Series的轉化

6.1 類似字典標記的方式或屬性的方式,可以將DataFrame的列獲取爲一個Series.
print frame2[‘state’] #取出列索引爲state的列的數據
#輸出結果如下:
#one Ohio
#two Ohio
#three Ohio
#four Nevada
#five Nevada
#Name: state, dtype: object
print frame2.year
#輸出結果如下:
#one 2000
#two 2001
#three 2002
#four 2001
#five 2002
#Name: year, dtype: int64

6.2 返回的Series擁有原DataFrame相同的索引,且其name屬性也已經被相應地設置好了。
行也可以通過位置或名稱的方式進行獲取
比如用索引字段ix,ix是取行的索引
print frame2.ix[‘three’]
#輸出的結果如下:
#year 2002
#state Ohio
#pop 3.6
#debt NaN
#Name: three, dtype: object

6.3 可以通過賦值的方式進行修改。
#frame2[‘debt’]=16.5 #debt列全爲16.5
#print frame2
#輸出結果如下:
#year state pop debt
#one 2000 Ohio 1.5 16.5
#two 2001 Ohio 1.7 16.5
#three 2002 Ohio 3.6 16.5
#four 2001 Nevada 2.4 16.5
#five 2002 Nevada 2.9 16.5
#將列表或數組賦值給某個列時,其長度必須跟DataFrame的長度相匹配。

#如果賦值的是一個Series,就會精確匹配DataFrame的索引,所有的空位都將被填上缺失值。
frame2[‘debt’]=np.arange(5.)
print frame2
#輸出結果如下:
#year state pop debt
#one 2000 Ohio 1.5 0.0
#two 2001 Ohio 1.7 1.0
#three 2002 Ohio 3.6 2.0
#four 2001 Nevada 2.4 3.0
#five 2002 Nevada 2.9 4.0

7.可以輸入給DataFrame構造器的數據:

二維ndarray 		                 數據矩陣,還可以傳入行標和列標
由數組、列表或元組組成的字典		 每個序列會變成DataFrame的一列,所有序列的長度必須相同
Numpy的結構化/記錄數組				 類似於“由數組組成的字典”
由Series組成的字典				 每個Series會成爲一列。如果沒顯式指定索引,由各Series的索引會被合
								 併成結果的行索引
由字典組成的字典					 各內層字典會成爲一列。鍵會被合併成結果的行索引,跟“由Series組成的字典”
								 的情況一樣
字典或Series的列表				 各項將會成爲DataFrame的一行。字典鍵或Series索引的並集將會成爲DataFrame
								 的列標
由列表或元組組成的列表				 類似於“二維ndarray”
另一個DataFrame					 該DataFrame的索引將會被沿用,除非顯式指定了其它索引
Numpy的MaskedArray			 	 類似於"二維ndarray"的情況,只是掩碼值在結果DataFrame會變成NA/缺失值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章