作者|Gon?alo Guimar?es Gomes
編譯|VK
來源|Towards Datas Science

作為每個資料科學家都非常熟悉和使用的最受歡迎和使用的工具之一,Pandas庫在資料操作、分析和可視化方面非常出色
為了幫助你完成這項任務并對Python編碼更加自信,我用Pandas上一些最常用的函式和方法創建了本教程,我真心希望這對你有用,
目錄
-
匯入庫
-
匯入/匯出資料
-
顯示資料
-
基本資訊:快速查看資料
-
基本統計
-
調整資料
-
布爾索引:loc
-
布爾索引:iloc
-
基本處理資料
我們將研究“泰坦尼克號”的資料集,主要有兩個原因:(1)很可能你已經對它很熟悉了;(2)它非常小,很簡單
泰坦尼克號的資料集可以在這里下載:https://bit.ly/33tOJ2S
匯入庫
為了我們的目的,“Pandas”庫是必須匯入的
import pandas as pd
匯入/匯出資料
“泰坦尼克號資料集”指定為“data”,
a) 使用read_csv將csv檔案匯入,你應該在檔案中添加資料的分隔符,
data = https://www.cnblogs.com/panchuangai/p/pd.read_csv("file_name.csv", sep=';')
b) 使用read_excel從excel檔案讀取資料,
data = https://www.cnblogs.com/panchuangai/p/pd.read_excel('file_name.xls')
c) 將資料幀匯出到csv檔案,使用to_csv
data.to_csv("file_name.csv", sep=';', index=False)
d) 使用“to_excel”將資料框匯出到excel檔案,
data.to_excel("file_name.xls′)
顯示資料
a) 正在列印前n行,如果沒有給定,則默認顯示5行,
data.head()

b) 列印最后“n”行,下面,顯示最后7行,
data.tail(7)

基本資訊:快速查看資料
a) 顯示資料集的維度:總行數、列數,
data.shape
(891,12)
b) 顯示變數型別,
data.dtypes
PassengerId int64
Survived int64
Pclass int64
Name object
Sex object
Age float64
SibSp int64
Parch int64
Ticket object
Fare float64
Cabin object
Embarked object
dtype: object
c) 按升序值顯示變數型別,
data.dtypes.sort_values(ascending=True)
PassengerId int64
Survived int64
Pclass int64
SibSp int64
Parch int64
Age float64
Fare float64
Name object
Sex object
Ticket object
Cabin object
Embarked object
dtype: object
d) 按型別對變數計數,
data.dtypes.value_counts()
object 5
int64 5
float64 2
dtype: int64
e) 按升序值對每種型別計數,
data.dtypes.value_counts(ascending=True)
float64 2
int64 5
object 5
dtype: int64
f) 以絕對值檢查生存者與非生存者的數量,
data.Survived.value_counts()
0 549
1 342
Name: Survived, dtype: int64
g) 檢查特征的比例,以百分比表示,
data.Survived.value_counts() / data.Survived.value_counts().sum()
與以下相同:
data.Survived.value_counts(normalize=True)
0 0.616162
1 0.383838
Name: Survived, dtype: float64
h) 檢查特征的比例,以百分比表示,四舍五入,
data.Survived.value_counts(normalize=True).round(decimals=4) * 100
0 61.62
1 38.38
Name: Survived, dtype: float64
i) 評估資料集中是否存在缺失值,
data.isnull().values.any()
True
j) 使用isnull()得到缺失值的數目,
data.isnull().sum()
PassengerId 0
Survived 0
Pclass 0
Name 0
Sex 0
Age 177
SibSp 0
Parch 0
Ticket 0
Fare 0
Cabin 687
Embarked 2
dtype: int64
k) 使用notnull()得到現有值的數目,
data.notnull().sum()
PassengerId 891
Survived 891
Pclass 891
Name 891
Sex 891
Age 714
SibSp 891
Parch 891
Ticket 891
Fare 891
Cabin 204
Embarked 889
dtype: int64
l) 按變數列出的缺失值的百分比(%),
data.isnull().sum() / data.isnull().shape[0] * 100
等同于
data.isnull().mean() * 100
PassengerId 0.000000
Survived 0.000000
Pclass 0.000000
Name 0.000000
Sex 0.000000
Age 19.865320
SibSp 0.000000
Parch 0.000000
Ticket 0.000000
Fare 0.000000
Cabin 77.104377
Embarked 0.224467
dtype: float64
m) 四舍五入(在示例中為2),
(data.isnull().sum() / data.isnull().shape[0] * 100).round(decimals=2)
等同于
(data.isnull().mean() * 100).round(decimals=2)
PassengerId 0.00
Survived 0.00
Pclass 0.00
Name 0.00
Sex 0.00
Age 19.87
SibSp 0.00
Parch 0.00
Ticket 0.00
Fare 0.00
Cabin 77.10
Embarked 0.22
dtype: float64
n) 另外:用組合文本列印結果,
print("The percentage of 'Age' is missing values:",(data.Age.isnull().sum() / data.Age.isnull().shape[0] * 100).round(decimals=2), "%")
The percentage of 'Age' is missing values: 19.87 %
print(f"The feature 'Age' has {data.Age.isnull().sum()} missing values")
The feature 'Age' has 177 missing values
print("'Age' has {} and 'Cabin' has {} missing values".format(data.Age.isnull().sum(), data.Cabin.isnull().sum()))
'Age' has 177 and 'Cabin' has 687 missing values
o) 形狀、變數型別和缺失值的資訊,
data.info()

p) 具體特征概述(下例中為“性別”和“年齡”),
data[['Sex','Age']].info()

基本統計
a) describe方法只給出資料的基本統計資訊,默認情況下,它只計算數值資料的主統計資訊,結果用pandas資料幀表示,
data.describe()

b) 添加其他非標準值,例如“方差”,
describe = data.describe()
describe.append(pd.Series(data.var(), name='variance'))

c) 顯示分類資料,
data.describe(include=["O"])
等同于
data.describe(exclude=['float64','int64'])
等同于
data.describe(include=[np.object])

d) 通過傳遞引數include='all',將同時顯示數字和非數字資料,
data.describe(include='all')

e) 別忘了通過在末尾添加.T來轉置資料幀,這也是一個非常有用的技巧
data.describe(include='all').T

f) 百分位數1%、5%、95%、99%,正如預期的那樣,它將只計算數字特征的統計資訊,
data.quantile(q=[.01, .05, .95, .99])

g) 摘要統計
- 顯示某些特征的唯一值,
data.Embarked.unique()
array(['S', 'C', 'Q', nan], dtype=object)
- 計算某個特征的唯一值的總和,
data.Sex.nunique()
2
- 計算總值
data.count()
PassengerId 891
Survived 891
Pclass 891
Name 891
Sex 891
Age 714
SibSp 891
Parch 891
Ticket 891
Fare 891
Cabin 204
Embarked 889
dtype: int64
- 某些特征的最大值
data.Age.max()
80.0
- 某些特征的最小值
data.Age.min()
0.42
- 某些特征的平均值
data.Age.mean()
29.69911764705882
- 某些特征的中值
data.Age.median()
28.0
- 某些特征的第99分位數
data.Age.quantile(q=[.99])
0.99 65.87
Name: Age, dtype: float64
- 某些特征的標準差
data.Age.std()
14.526497332334044
- 某些特征的方差
data.Age.var()
211.0191247463081
h)額外
問題1-顯示分類特征“Embarked”最常見的兩個值,
data[‘Embarked’].value_counts().head(2)
S 644
C 168
Name: Embarked, dtype: int64
問題2-“Embarked”的百分比最高是多少?
top_unique = data['Embarked'].value_counts(normalize=True)[0]
print(f'{top_unique:.2%}')
72.44%
i) 變數之間的相關性,正如預期的那樣,它將只顯示數值資料的統計資訊,
data.corr()默認情況下的皮爾遜相關性

J) 所選變數(示例中為“Survived”)與其他變數之間的相關性,
correlation = data.corr()
correlation.Survived.sort_values().sort_values(ascending=False) # 有序值
Survived 1.000000
Fare 0.257307
Parch 0.081629
PassengerId -0.005007
SibSp -0.035322
Age -0.077221
Pclass -0.338481
Name: Survived, dtype: float64
調整資料
a) 列出列的名稱,
data.columns
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'], dtype='object')
b) 重命名某些列(在下面的示例中,將“PassengerId”改為“id”),
data.rename(columns = {data.columns[0]:'id'}, inplace=True)
等同于
data.rename(columns = {'PassengerId':'id'}, inplace=True)
Index(['id', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'], dtype='object')
c) 重命名多個列(“PassengerId”、“Pclass”和“SibSp”),
data.rename(columns = {'PassengerId':'Passenger_Id', 'Pclass':'P_Class', 'SibSp':'Sib_Sp'}, inplace=True)
Index(['Passenger_Id', 'Survived', 'P_Class', 'Name', 'Sex', 'Age', 'Sib_Sp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'], dtype='object')
d) 通過串列生成式將下劃線替換為點(僅適用于“Passenger.Id”、“P.Class”和“Sib.Sp”),
data.columns = [x.lower().replace('.', '') for x in data.columns]
Index(['passengerid', 'survived', 'pclass', 'name', 'sex', 'age', 'sibsp', 'parch', 'ticket', 'fare', 'cabin', 'embarked'], dtype='object')
e) 小寫化字符并洗掉點(應用于'Passenger.Id','P.Class'和'Sib.Sp'),
data.columns = [x.lower().replace('.', '') for x in data.columns]
Index(['passengerid', 'survived', 'pclass', 'name', 'sex', 'age', 'sibsp', 'parch', 'ticket', 'fare', 'cabin', 'embarked'], dtype='object')
f) 將列名稱大寫,
data.columns = [x.capitalize() for x in data.columns]
Index(['Passengerid', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'Sibsp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'], dtype='object')
布爾索引:loc
data.loc[<lines>, <columns>],按列名稱選擇
a) 選擇行,
data.loc[[3]]

b) 選擇行陣列,
data.loc[6:8]

c) 選擇幾行,
data.loc[[7,28,39]]

d) 從“Name”、“Age”、“Sex”和“Survived”幾個列中選擇一行,
data.loc[[7], ['Name', 'Age', 'Sex', 'Survived']]

e) 從多個列中選擇多行,
data.loc[[7,28,39], ['Name', 'Age', 'Sex','Survived']]

f) 在某些條件下使用loc選擇特定值,在這種情況下,從第4行到第10行選擇年齡大于或等于10歲的乘客,
data.loc[4:10, ['Age']] >= 10

g) 在某些條件下使用loc選擇特定值,在這種情況下,從前5行選擇乘坐C123客艙的乘客,
data.loc[:4, ['Cabin']] == 'C123'

布爾索引:iloc
data.iloc[<lines>, <columns>]按數字選擇行和列
a) 選擇資料集的第4行,
data.iloc[3]

b) 從所有列中選擇一個行陣列,
data.iloc[6:12]

c) 從所有列中選擇幾行,
data.iloc[[7,28,39],:]

d) 從“Name”、“Age”、“Sex”和“Survived”列中選擇一行,
data.iloc[[7], [3,5,4,1]]

e) 從多個列中選擇多行,
data.iloc[[7,28,39], [3,5,4,1]]

f) 選擇多行形成列序列,
data.iloc[[7,28,39], 3:10]

g) 選擇其他值,
- 從第6行到第12行,最后一列,
data.iloc[6:13, -1]
- 第3列和第6列的所有行,
data.iloc[:, [3,6]]
- 7、28、39行,從第3列到第6列,
data.iloc[[7,28,39], 3:7]
- 最后一列的最后20行,
data.iloc[-20:, -1:]
基本處理資料
-
Axis = 0,表示行,如果未指定,默認為Axis=0,
-
Axis = 1,表示列,

a) (洗掉nan值),
data.isnull().values.any()是否有丟失的資料?
True
如果沒有將其分配到(新)變數中,則應該指定inplace=True,以便更改能生效,
data.dropna(axis=0, inplace=True) #從行中洗掉nan
data.isnull().values.any() #是否有丟失的資料?
False
b) 洗掉列
data.drop(columns=['PassengerId', 'Name'], axis=1).head()

c) value_counts也可以顯示NaN值,
data.Age.value_counts(dropna=False)
NaN 177
24.00 30
22.00 27
18.00 26
28.00 25
...
36.50 1
55.50 1
66.00 1
23.50 1
0.42 1
Name: Age, Length: 89, dtype: int64
d) 替換丟失值
- 創建新的資料幀,復制資料,以保持原始資料的完整性,
new_df = data.copy()
計算年齡平均值:
new_df.Age.mean()
29.69911764705882
- 用資料的平均值填充NAN,并將結果分配給一個新列,
new_df['Age_mean'] = new_df.Age.fillna(new_df.Age.mean())
年齡的中值
new_df.Age.median()
28.0
用資料的中值填充任意NAN,并將結果分配給一個新列,
new_df['Age_median'] = new_df.Age.fillna(new_df.Age.median())
- 驗證結果
new_df[['Age', 'Age_mean', 'Age_median']].isnull().sum()
Age 177
Age_mean 0
Age_median 0
dtype: int64
顯示第106至110行,以驗證兩個NAN示例的插補(第107和109行),
new_df[['Age', 'Age_mean', 'Age_median']][106:110]

結束了

結論
我真誠地希望你覺得這個教程有用,因為它可以幫助你撰寫代碼的開發,我將在將來更新它并將其鏈接到其他Python教程,
原文鏈接:https://towardsdatascience.com/pandas-made-easy-the-guide-i-81834f075893
歡迎關注磐創AI博客站:
http://panchuang.net/
sklearn機器學習中文官方檔案:
http://sklearn123.com/
歡迎關注磐創博客資源匯總站:
http://docs.panchuang.net/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/173180.html
標籤:其他
上一篇:Anaconda常用命令
下一篇:金融市場中的NLP——情感分析
