利用Python處理Excel數據——pandas庫

新建一個excel表格(table1.csv)用於案例講解:

一、導庫

import pandas as pd
import numpy as np

二、讀取數據

df = pd.read_excel('table1.xlsx') # 相對路徑
# df = pd.read_excel(r'E:\Anaconda\hc\dataScience\table1.csv') # 絕對路徑

三、顯示數據

1.顯示數據的行與列數

df.shape
(6, 5)

2.顯示數據格式dtpyes

df.dtypes
Name      object
Age        int64
Sex        int64
Class      int64
Score    float64
dtype: object

3.顯示列名

df.columns
Index(['Name', 'Age', 'Sex', 'Class', 'Score'], dtype='object')

4.顯示前數據前2行

df.head(2)
  Name Age Sex Class Score
0 Tom 19 1 162061 80.0
1 Jack 20 1 152051 90.0

5.顯示數據後3行

df.tail(3)
  Name Age Sex Class Score
3 Tony 18 0 170462 90.0
4 Tim 19 0 162051 NaN
5 Bob 22 1 132022 80.0

6.顯示數據唯一值(unique函數)

df['Score'].unique()
array([ 80.,  90., 100.,  nan])

7.對第幾行數據不讀取

# 沒有讀取第2行
df1 = pd.read_excel('table1.csv',skiprows=[2] ) 
df1
  Name Age Sex Class Score
0 Tom 19 1 162061 80.0
1 Alan 18 1 170461 100.0
2 Tony 18 0 170462 90.0
3 Tim 19 0 162051 NaN
4 Bob 22 1 132022 80.0

8.對缺失值進行識別

# 所有缺失值顯示爲True
df.isnull()
  Name Age Sex Class Score
0 False False False False False
1 False False False False False
2 False False False False False
3 False False False False False
4 False False False False True
5 False False False False False

四、清洗數據

1.刪除空值 (dropna函數)

df2 = df.dropna(how='any')
df2
  Name Age Sex Class Score
0 Tom 19 1 162061 80.0
1 Jack 20 1 152051 90.0
2 Alan 18 1 170461 100.0
3 Tony 18 0 170462 90.0
5 Bob 22 1 132022 80.0

2.填充空值(fillna函數)

df3 = df.fillna(value=0)
df3
  Name Age Sex Class Score
0 Tom 19 1 162061 80.0
1 Jack 20 1 152051 90.0
2 Alan 18 1 170461 100.0
3 Tony 18 0 170462 90.0
4 Tim 19 0 162051 0.0
5 Bob 22 1 132022 80.0

3.用均值對空值進行填充

df4 = df['Score'].fillna(df['Score'].mean())
df4
0     80.0
1     90.0
2    100.0
3     90.0
4     88.0
5     80.0
Name: Score, dtype: float64

4.更改數據格式

df1['Score'].astype('int64')
0     80
1     90
2    100
3     90
5     80
Name: Score, dtype: int64

(注:如果存在空值,更改數據格式會報錯!)

5.更改列名

df5 = df.rename(columns={'Score': 'score'})
df5
  Name Age Sex Class score
0 Tom 19 1 162061 80.0
1 Jack 20 1 152051 90.0
2 Alan 18 1 170461 100.0
3 Tony 18 0 170462 90.0
4 Tim 19 0 162051 NaN
5 Bob 22 1 132022 80.0

6.對列表內的值進行替換(replace函數)

df6 = df['Name'].replace('Bob', 'bob')
df6
0     Tom
1    Jack
2    Alan
3    Tony
4     Tim
5     bob
Name: Name, dtype: object

五、數據預處理

1.對數據進行排序

df.sort_values(by=['Score'])
  Name Age Sex Class Score
0 Tom 19 1 162061 80.0
5 Bob 22 1 132022 80.0
1 Jack 20 1 152051 90.0
3 Tony 18 0 170462 90.0
2 Alan 18 1 170461 100.0
4 Tim 19 0 162051 NaN

(注:默認升序,且空值在後面)

2.數據分組

①單一條件分組

# 如果Score列的值>=85,Score列顯示high,否則顯示low
# group列爲增加列
df['group'] = np.where(df['Score'] > 85,'high','low')
df
  Name Age Sex Class Score group
0 Tom 19 1 162061 80.0 low
1 Jack 20 1 152051 90.0 high
2 Alan 18 1 170461 100.0 high
3 Tony 18 0 170462 90.0 high
4 Tim 19 0 162051 NaN low
5 Bob 22 1 132022 80.0 low

②多個條件分組

# 利用loc函數,進行多列查詢
# sign爲增加列
df.loc[(df['Sex'] == 1) & (df['Age']>= 19), 'sign']=1
df
  Name Age Sex Class Score group sign
0 Tom 19 1 162061 80.0 low 1.0
1 Jack 20 1 152051 90.0 high 1.0
2 Alan 18 1 170461 100.0 high NaN
3 Tony 18 0 170462 90.0 high NaN
4 Tim 19 0 162051 NaN low NaN
5 Bob 22 1 132022 80.0 low 1.0

六、數據提取

1.按標籤提取(loc函數)

df.loc[0:3]
  Name Age Sex Class Score group sign
0 Tom 19 1 162061 80.0 low 1.0
1 Jack 20 1 152051 90.0 high 1.0
2 Alan 18 1 170461 100.0 high NaN
3 Tony 18 0 170462 90.0 high NaN

2.按位置進行提取(iloc函數)

①按區域提取

df.iloc[:4, :5]
  Name Age Sex Class Score
0 Tom 19 1 162061 80.0
1 Jack 20 1 152051 90.0
2 Alan 18 1 170461 100.0
3 Tony 18 0 170462 90.0

②按位置提取

#[0, 2, 5] 代表指定的行,[0, 1, 5] 代表指定的列
df.iloc[[0, 2, 5],[0, 1, 5]]
  Name Age group
0 Tom 19 low
2 Alan 18 high
5 Bob 22 low

3.按條件提取(isin與loc函數)

①用isin函數進行判斷

# 判斷Sex是否爲1
df['Sex'].isin([1])
0     True
1     True
2     True
3    False
4    False
5     True
Name: Sex, dtype: bool
 
  Name Age Class
0 Tom 19 162061
1 Jack 20 152051
2 Alan 18 170461
5 Bob 22 132022

②用loc函數進行判斷

# Sex爲1,分數大於85
df1.loc[(df1['Sex'] == 1) & (df1['Score'] > '85'), ['Name','Age','Class']]

③先判斷結果,將結果爲True的提取

# 先判斷Score列裏是否包含80和90,然後將複合條件的數據提取出來。
df.loc[df['Score'].isin(['80','90'])]
  Name Age Sex Class Score group sign
0 Tom 19 1 162061 80.0 low 1.0
1 Jack 20 1 152051 90.0 high 1.0
3 Tony 18 0 170462 90.0 high NaN
5 Bob 22 1 132022 80.0 low 1.0

 

 

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章