Python與數據挖掘學習筆記(1)——Pandas模塊


從圖書館借了一本有關於使用Python進行數據挖掘的書,是機械工業出版社出版的由張良均寫的一本書,拿來作為入門,今天在學習使用Pandas模塊時耗費了比較久的時間,記錄一下今天的心得和體會。

書中有一道題目是基於給定的數據集,完成一系列操作:

1.判斷第一列中(Id)是否有缺失值,如果有的話補充完整;

2.判斷是否有重復記錄,如果有,刪除至唯一。

3.計算成績的平均值,作為新的一列加入到原始數據框中。

4.尋找平均分最高的記錄。

5.統計每個科目及格的人數。

所給的數據集如下所示,是一個csv格式的表格。在此我使用的是python3.6進行編程,和書中使用的2.7版本有一些區別。

作為一個菜鳥,安裝模塊也耗費了我不少時間,后來發現使用PyCharm自帶的安裝工具是很方便的,在Setting里面的Project Interpretor即可找到相對應的模塊進行安裝,一定注意安裝的是Pandas模塊而不是Panda。

Pandas模塊中兩個很重要的數據結構即為DataFrame和Series,可以簡單的理解為一個多列的表格和一個單列的表格。一些基本的操作網上相關的教程很多,在此不再贅述。

Pandas模塊的官方文檔:http://pandas.pydata.org/pandas-docs/stable/index.html

里面的方法很多,看了一天我也只是看了個大概,在此簡單介紹一下我的代碼里用到的一些吧,首先先上代碼。

import pandas as pd
from collections import Iterable
import numpy

pd.options.display.precision = 2     #設置小數點精度
data1 = pd.read_csv('F:\PythonTest\Mytestdata\data.csv')
# print(data1)
data1['Id'] = data1['Id'].interpolate()   #判斷第一列是否有缺失值
data1 = data1.drop_duplicates(subset=('English','Chinese','Math'))#去掉重復條目

data1 = data1.fillna(0)   #成績沒有的視為0分
data1['Chinese'] = data1['Chinese'].astype('int64') #成績換為整形變量
data1['Id'] = list(range(1,data1['Id'].size+1))
data1 = data1.set_index('Id') #用ID作為index
average = data1.mean(axis=1)
average.name = 'Average'   #給Average一個name屬性,否則不能使用join
data1 = data1.join(average) #平均值作為一個column添加進DataFrames中
print(data1)
print('The best grade is: {0:.2f} and the id is: '.format(average.values.max()),end='')
while True:
    average_max = average.values.max()
    print(average.idxmax(), end=' ')
    average = average.drop(index = average.index[average.values.argmax()])#刪除已找到的最大值 尋找是否有重復值
    if not average_max == average.values.max():
        print('\n')
        break
print('There is {0} students who has passed the Chinese exam.'.format(data1['Chinese'].where(data1['Chinese']>=60).count()))
print('There is {0} students who has passed the Math exam.'.format(data1['Math'].where(data1['Math']>=60).count()))
print('There is {0} students who has passed the English exam.'.format(data1['English'].where(data1['English']>=60).count()))


首先一個是options這個選項,他定義了一些在程序使用過程中的設置,在此為了美觀,我將顯示的精度設置為了小數點后兩位,值得注意的一點是直接在print中調用format進行格式化會提示報錯,因為數據結構為DataFrame,不支持直接進行format。

read_csv:讀取數據集

interpolate:可以用來判斷DataFrame或者Series中有沒有空缺值並進行補充,同時也可以進行設置補充的值是多少,在這里默認的是按照線性順序進行補充

drop_duplicates:去掉重復的條目,注意選擇其中的subset時把三個科目的成績全部包含在一個tuple里。

fillna:把其中缺失的成績補充為0

astype:因為其中語文的成績為float,把他變成一個整形變量

set_index:將其中的Id作為index

mean:求平均值

join:將一個DataFrame或者Series添加到現有的數據結構中

count:求得一個數據結構中為非空數值的個數

where:可以理解為將布滿足條件的數值屏蔽,在該題目中,條件為及格,即大於等於60分,使用了where以后,會得到一個copy,在這個copy中,不滿足條件的values都被替換成為NaN,因此可以搭配count得到及格的人數

然后還有一個需要注意的地方就是在尋找平均數最大值的時候,使用argmax僅僅能得到第一個最大值的index,如果有重復的則不能得到,因此需要將求得的最大值的哪一個條目刪除以后繼續求最大值,直到求得的最大值發生改變。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM