共计 7878 个字符,预计需要花费 20 分钟才能阅读完成。
作者 |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 = pd.read_csv("file_name.csv", sep=';')
b)应用 read_excel 从 excel 文件读取数据。
data = 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.co…
欢送关注磐创 AI 博客站:
http://panchuang.net/
sklearn 机器学习中文官网文档:
http://sklearn123.com/
欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/