Pandas(DataFrame)

DataFrame
DataFrame是一個【表格型】的數據結構,可以看做是【由Series組成的字典】(共用同一個索引)。DataFrame由按一定順序排列的多列數據組成。設計初衷是將Series的使用場景從一維拓展到多維。DataFrame既有行索引,也有列索引。
行索引:index
列索引:columns
值:values(numpy的二維數組)
1)DataFrame的創建
最常用的方法是傳遞一個字典來創建。DataFrame以字典的鍵作爲每一【列】的名稱,以字典的值(一個數組)作爲每一列。
此外,DataFrame會自動加上每一行的索引(和Series一樣)。

同Series一樣,若傳入的列與字典的鍵不匹配,則相應的值爲NaN。

data={'color':['blue','green','yellow','red','white'],
     'object':['ball','pen','pencil','paper','mug'],
     'price':[1.2,1.0,0.6,0.9,1.7]}
frame=DataFrame(data,columns=['color','object','price','weight'],
               index=['one','two','three','four','five'])
frame

frame.values

frame.columns

frame.index

frame.shape

練習4:
根據以下考試成績表,創建一個DataFrame,命名爲ddd:
    張三  李四
語文 150  0
數學 150  0
英語 150  0
理綜 300  0

dic={'張三':[1500,150,150,300],'李四':[0,0,0,0]}
ddd=DataFrame(dic,index=['語文','數學','英語','理綜'])
ddd

2)DataFrame的索引
(1) 對列進行索引
- 通過類似字典的方式
- 通過屬性的方式
可以將DataFrame的列獲取爲一個Series。返回的Series擁有原DataFrame相同的索引,且name屬性也已經設置好了,就是相應的列名。

ddd['張三']#ddd.張三

語文    1500
數學     150
英語     150
理綜     300
Name: 張三, dtype: int64

(2) 對行進行索引
- 使用.ix[]來進行行索引
- 使用.loc[]加index來進行行索引
- 使用.iloc[]加整數來進行行索引
同樣返回一個Series,index爲原來的columns

ddd.iloc[1]#ddd.loc['數學']#ddd.ix['數學']

張三    150
李四      0
Name: 數學, dtype: int64

(3) 對元素索引的方法
- 先使用列索引
- 先使用行索引
- 使用values屬性(二維numpy數組)

print("使用列索引")
print(ddd.張三['語文'])    #先列再行
print(ddd.ix['語文']['張三'])#先行再列
print(ddd.iloc[0][0])   #使用隱式索引

【注意】 直接用中括號時:
索引表示的是列索引
切片表示的是行切片

3)DataFrame的運算
(1) DataFrame之間的運算
同Series一樣:
在運算中自動對齊不同索引的數據
如果索引不對應,則補NaN

A=DataFrame(np.random.randint(0,10,(3,3)),columns=list('abc'))
B=DataFrame(np.random.randint(0,10,(2,2)),columns=list('ab'))
A.add(B,fill_value=0)


(2) Series與DataFrame之間的運算
【重要】
使用Python操作符:以行爲單位操作(參數必須是行),對所有行都有效。(類似於numpy中二維數組與一維數組的運算,但可能出現NaN)
使用pandas操作函數:
  axis=0:以列爲單位操作(參數必須是列),對所有列都有效。
  axis=1:以行爲單位操作(參數必須是行),對所有列都有效。

C.sub(C['a'],axis=0)  



a b c
0 0.0 0.0 -16.0
1 0.0 1.0 -4.0
2 0.0 4.0 -1.0


============================================
練習6:
1:假設ddd是期中考試成績,ddd2是期末考試成績,請自由創建ddd2,並將其與ddd相加,求期中期末平均值。
2:假設張三期中考試數學被發現作弊,要記爲0分,如何實現?
3:李四因爲舉報張三作弊立功,期中考試所有科目加100分,如何實現?
4:後來老師發現有一道題出錯了,爲了安撫學生情緒,給每位學生每個科目都加10分,如何實現?


1:data2 = {'張三':[110,140,130,289],
        '李四':[80,90,60,180]}
ddd = pd.DataFrame(data2,index=['語文','數學','英語','理綜'])
ddd

data3 = {"張三":[120,130,140,299],
        '李四':[60,70,80,150]}
ddd2 = pd.DataFrame(data3,index=['語文','數學','英語','理綜'])
ddd2

ddd1 = ddd.add(ddd2)
ddd1
ddd1.div(2)

2:print('張三期中考試作弊,成績爲0')
ddd['張三']['數學']=0
ddd

3:print('李四檢舉有功,加100')
ddd['李四'] += 100
ddd

4:print('老師出錯題目,每位同學加10分')
ddd2+=10
ddd2

發佈了39 篇原創文章 · 獲贊 16 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章