Python數據分析(一)-Pandas「1」

Pandas是什麼?

Pandas是一個強大的分析結構化數據的工具集;它的使用基礎是Numpy(提供高性能的矩陣運算);用於數據挖掘和數據分析,同時也提供數據清洗功能

Pandas利器

  • DataFrame
    DataFrame是Pandas中的一個表格型的數據結構,包含有一組有序的列,每列可以是不同的值類型(數值、字符串、布爾型等),DataFrame即有行索引也有列索引,可以被看做是由Series組成的字典。
    對DataFrame最直接的理解就是它是一個Excel文件。
  • Series
    它是一種類似於一維數組的對象,是由一組數據(各種NumPy數據類型)以及一組與之相關的數據標籤(即索引)組成。僅由一組數據也可產生簡單的Series對象。
  • DataFram和Series的關係
    DataFrame的一列就是Series,Series轉爲dataframe可以採用函數to_frame.

Pandas使用demo

所需資源:College.csv資源

import pandas as pd
import numpy as np
from IPython.display import display
# (對jupyter行數的一個設置)默認情況下,一個cell的顯示行列存在數量限制。數據集過大時,中間部分數據會以省略號顯示。如果想增減或不做數量限制,可通過設置pd.options.display.max_rows/max_columns以達到目的。
pd.options.display.max_columns = 50
# 直接將文件放於同一個路徑下,若其他路徑,需寫相對路徑
college = pd.read_csv('College.csv')
# 默認展示行數爲5行
college.head()

輸出結果:
在這裏插入圖片描述
對header的基本設置

import pandas as pd
import numpy as np
# 設置header爲中文.注意:若設置names要設置完整,不然則是從後往前設置部分。
#對於iris.csv直接從網上獲取下載就好,有好多資源
iris_data=pd.read_csv('iris.csv',header=0,
                     names=["花萼長度","花萼寬度","花瓣長度","花瓣寬度","類別"],
                     encoding='gbk');
# 設置顯示最大行數,爲5行。其實head()默認顯示行數也是5
pd.set_option("display.max_rows",5)
iris_data.head()

# 想爲college中的header設置中文名,但是因爲字段太多,只設置了兩個,看結果則明白,其設置是從後往前設置的。
college_data=pd.read_csv('college.csv',header=0,names=["大學","排名"],
                        encoding='gbk')
# pd.set_option("display.max_rows",5)
college_data.head()

在這裏插入圖片描述

# 顯示所有的字段名。
columns=college.columns
columns

//輸出結果:
Index(['Name', 'Private', 'Apps', 'Accept', 'Enroll', 'Top10perc', 'Top25perc',
       'F.Undergrad', 'P.Undergrad', 'Outstate', 'Room.Board', 'Books',
       'Personal', 'PhD', 'Terminal', 'S.F.Ratio', 'perc.alumni', 'Expend',
       'Grad.Rate'],
      dtype='object')

iloc和loc的區別

  • loc
    loc是select by label(name)
    loc函數是選擇dataframe中那一行的index == k的
  • iloc
    iloc是select by position
    iloc函數是選擇dataframe中第position行
# 選擇數據子集
# loc是select by position,loc函數是選擇dataframe中第position行,可以無任何順序
s=college.iloc[:,[4,8,2]].head()
# loc是select by label(name),loc函數是選擇dataframe中那一行的index == k的,可以無任何順序
s1=college.loc[:,['PhD','Books','Enroll']]
print(s.head())
# print(s1.head()),最後的一次輸出可以不用print
s1.head()

在這裏插入圖片描述

利用loc實現基本賦值

正常返回結果:
花萼長度 花萼寬度 花瓣長度 花瓣寬度 類別
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa

通過loc可以對某一個值,某一行或者某一列的數據進行重新賦值

# 建立數據副本,以便多次修改
DataFrame=iris_data[:5].copy()
# 修改第0行類別標籤列的數據
DataFrame.loc[1,"類別"]="新類別名"
print(DataFrame)

# 建立數據副本,以便多次修改
DataFrame = iris_data[:5].copy() 
# 修改第1行的數據
DataFrame.loc[1]="新數據"
print(DataFrame)

# 建立數據副本,以便多次修改
DataFrame = iris_data[:5].copy() 
# 修改第1列的數據
DataFrame.loc[:,"花萼長度"]=10
print(DataFrame)

//輸出結果(一一對應)

  花萼長度  花萼寬度  花瓣長度  花瓣寬度      類別
1   5.1   3.5   1.4   0.2    新類別名
2   4.9   3.0   1.4   0.2  setosa
3   4.7   3.2   1.3   0.2  setosa
4   4.6   3.1   1.5   0.2  setosa
5   5.0   3.6   1.4   0.2  setosa

  花萼長度 花萼寬度 花瓣長度 花瓣寬度      類別
1  新數據  新數據  新數據  新數據     新數據
2  4.9    3  1.4  0.2  setosa
3  4.7  3.2  1.3  0.2  setosa
4  4.6  3.1  1.5  0.2  setosa
5    5  3.6  1.4  0.2  setosa

   花萼長度  花萼寬度  花瓣長度  花瓣寬度      類別
1    10   3.5   1.4   0.2  setosa
2    10   3.0   1.4   0.2  setosa
3    10   3.2   1.3   0.2  setosa
4    10   3.1   1.5   0.2  setosa
5    10   3.6   1.4   0.2  setosa

iloc獲取部分數據,左閉右開原則

正常返回前五行的結果:
花萼長度 花萼寬度 花瓣長度 花瓣寬度 類別
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa

# iloc中括號,是左閉右開 1:3則是第一行和第二行,不包括第三行
# 獲取第一行,第二行的第一列數值,會打印出索引號
DataFrame.iloc[1:3,1]

# 獲取第一行,第二行的數據,第一列第二列的數據
DataFrame.iloc[1:3,1:3]

# 前三行前三列
DataFrame.iloc[:3,:3]

# 0,1,3行的第一列,和最開始的獲取是一樣的,無順序之分,寫哪列獲取哪列
DataFrame.iloc[[0,1,3],1]

# 獲取1,3,4行,切記:使用TrueFalse方式,必須把所有列都獲取完整,不想要的都用False表示,不然則會報錯:
# Item wrong length 4 instead of 5.(本來有5列,結果告訴你就表示了4列,不完整,哈哈哈)
DataFrame.iloc[[True, False, True,True,False]] 


//輸出結果(一一對應)

2    3.0
3    3.2
Name: 花萼寬度, dtype: float64

	花萼寬度	花瓣長度
2	3.0	1.4
3	3.2	1.3

	花萼長度	花萼寬度	花瓣長度
1	10	3.5	1.4
2	10	3.0	1.4
3	10	3.2	1.3

1    3.5
2    3.0
4    3.1
Name: 花萼寬度, dtype: float64

	花萼長度	花萼寬度	花瓣長度	花瓣寬度	類別
1	10	3.5	1.4	0.2	setosa
3	10	3.2	1.3	0.2	setosa
4	10	3.1	1.5	0.2	setosa

loc實現條件檢索

正常返回前五行的結果:
花萼長度 花萼寬度 花瓣長度 花瓣寬度 類別
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa

# 篩選:花萼長度一列的值都大於4
s1=DataFrame.loc[DataFrame["花萼長度"]>4]
s1

# 篩選:花萼長度大於等於5.0且花瓣長度大於等於1.4的
s2=DataFrame.loc[(DataFrame["花萼長度"]>=5.0) & (DataFrame["花瓣長度"]>=1.4)]
s2


//輸出結果(一一對應)

全部返回,因爲花萼長度無小於4的

	花萼長度	花萼寬度	花瓣長度	花瓣寬度	類別
1	5.1	3.5	1.4	0.2	setosa
5	5.0	3.6	1.4	0.2	setosa

set_index()

2020年07月01日17:50:55第一次理解:

# index.tolist直接獲取索引,然後整合成list
index=college.iloc[[60,99,3]].index.tolist()
print(index)
# college=college.set_index("Name")或者加上drop=True,此兩種寫法只能執行一次,再次執行會提示None of ['Name'] are in the columns
# set_index 設置索引
college=college.set_index("Name",drop=False)
index2=college.iloc[[60,99,3]].index.tolist()
print(index2)

//第一遍執行結果:
[60, 99, 3]
['Bowdoin College', 'Centenary College of Louisiana', 'Agnes Scott College']

//第二遍執行結果:
['Bowdoin College', 'Centenary College of Louisiana', 'Agnes Scott College']
['Bowdoin College', 'Centenary College of Louisiana', 'Agnes Scott College']

主要原因則是set_index將Name設置成了索引值,所以當第二次執行的時候,則也會顯示Name的信息。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章