掌握 40 道实战练习题,让你轻松玩转 Python !

共 5925字,需浏览 12分钟

 ·

2020-12-25 01:28

Pandas 是使用最广泛的数据分析和操作库之一。它提供了许多功能和方法来清理、处理、操作和分析数据。

本文我将列出 40 个示例,不仅包括常用函数和操作技巧,还包括一些功能强大却非常低调的技巧,这些示例让你轻松玩转 Python。文中数据文末可以获取!

1、读取 csv 文件

read_csv 提供了将 csv 文件读取到 Pandas 数据帧的灵活方式。

import numpy as np
import pandas as pd
marketing = pd.read_csv("DirectMarketing.csv")
groceries = pd.read_csv("Groceries_dataset.csv")

2、使用 astype 更改数据类型

日期需要存储在日期时间数据类型中,以便使用 pandas 的日期时间函数,查看数据框的数据类型。

groceries.dtypes

我们也可以使用 astype 函数更改数据类型。

groceries['Date'] = groceries['Date'].astype("datetime64")
groceries.dtypes
Member_number               int64
Date               datetime64[ns]
itemDescription            object

3、使用 to_datetime 更改数据类型

我们还可以使用 to_datetime 为日期分配适当的数据类型。语法与 astype 函数略有不同。

groceries['Date'] = pd.to_datetime(groceries['Date'])

4、分析日期

在第一个示例中,我提到 read_csv 在读取 csv 文件方面非常灵活。它还可以处理日期。我们可以在读取数据时为日期分配适当的数据类型。这将使我们不必在以后更改数据类型。

groceries = pd.read_csv("Groceries_dataset.csv", parse_dates=['Date'])
groceries.dtypes
Member_number               int64
Date               datetime64[ns]
itemDescription            object

5、使用 isin 方法进行筛选

有许多方法可以基于值筛选数据框。我们可以使用逻辑运算符。

isin 方法允许基于一组特定的值进行筛选。我们可以只传递要筛选的值的列表。

groceries[groceries.Member_number.isin([3737243339152625])].shape

6、~ 操作符

波浪(~)运算符可理解为"不"。例如,我们可以在上一示例中找到筛选行的补充,只需在开头添加波浪线运算符。

groceries[~groceries.Member_number.isin([3737243339152625])].shape
(386393)

7、值计数与规范化

value_counts是最常用的函数之一。它计算每个值的匹配次数并返回一个序列。如果与规范化参数一起使用,我们会获得发生百分比的概览。

marketing.Catalogs.value_counts(normalize=True)

8、将列设置为索引

默认情况下,Pandas 会为数据框分配整数索引,但我们也可以使用"索引"函数set_index。

例如,我们可以将日期列设置为数据框的索引。

groceries.set_index('Date', inplace=True)

9、重置索引

删除某些行时,pandas 不会自动重置索引。同样,当两个数据框串联时,不会重置索引。在这种情况下,新数据框将不具有连续索引值。

在这种情况下,可以实用 reset_index 函数。

groceries.reset_index(drop=True, inplace=True)

如果我们不设置为 True,则旧索引将作为数据帧中的新列保留。

10、unique

unique 函数返回列中唯一值的数组。

groceries['itemDescription'].unique()[:5]
array(['tropical fruit''whole milk''pip fruit''other vegetables','rolls/buns'], dtype=object)

11、创建较大尺寸的随机样本

sample 函数可用于创建数据帧的随机样本。在机器学习中处理不平衡数据集时,它会派上用场。

我们只能创建小于原始样本的样本,除非替换参数更改为 true。让我们只使用花费少于 300 的来创建数据框的随机样本。

less = marketing[marketing.AmountSpent < 300].sample(n=400, replace=True)
less.shape
(40010)

12、组合数据框

我们可以水平或垂直地将数据帧与串联函数串联。

less.shape, marketing.shape
((40010), (100010))
new = pd.concat([marketing, less])
new.shape
(140010)

13、按索引选择行和列的范围

我们可以使用 iloc 函数选择行和列的范围。它接受所需行和列的索引。

例如,我们可以选择前 4 行和前 3 列,如下所示:

marketing.iloc[:4,:3]

14、按索引选择特定行和列

iloc 函数还接受值数组而不是范围。我们可以传递一个列表或数字数组。

toselect = np.random.randint(100, size=7)
marketing.iloc[toselect, [2,4,6]]

15、按标签选择行和列

loc 函数与 iloc 函数一样,但它接受标签而不是索引

marketing.loc[toselect,['Gender','Age','Age','Catalogs']]

16、从日期提取年和月

pandas 提供了许多功能,在日期操作上,可以通过 dt 进行操作使用。

我们可以轻松地从日期中提取日期和月份,如下所示:

groceries['Year'] = groceries['Date'].dt.year
groceries['Month'] = groceries['Date'].dt.month

17、删除列和行

在上一个示例中,我们创建了两个新列。默认情况下,panas 在数据框的末尾添加新列,但我们可以更改它。

我们将在下一个示例中在特定位置添加新列。但是,我们首先需要删除它们,这可以通过使用 drop 函数完成。

groceries.drop(['Year','Month'], axis=1, inplace=True)

18、插入列

如果将年和月份列放在日期列之前,则它们可能更好。我们可以使用插入函数来完成此任务

year = groceries['Date'].dt.year
month = groceries['Date'].dt.month
groceries.insert(1'Month', month)
groceries.insert(2'Year', year)

19、替换值

在上一个示例中,我们创建了一个包含表示月数的月份列。你可能希望此列包含月份的名称(即 1 月、2 月等)。

有多种方法可以执行此操作。我先告诉你更困难的方式。在下面的示例中,我们将看到一个更简单的方法。

我们可以使用替换函数将整数替换为月份名称字符串。

month_names = {1:'January'2:'February'3:'March'4:'April',5'May'6:'June'7:'July'8:'August'9:'September',10:'October'11:'November'12:'December'}
groceries.Month.replace(month_names, inplace=True)

我们创建了一个字典,然后将其传递给替换函数。

20、month_name

执行上一步有更简单的方法。

groceries['Month'] = groceries['Date'].dt.month_name()

21、累计和

累积函数允许基于另一列的累积总和创建列。

marketing['CumAmountSpent'] = marketing['AmountSpent'].cumsum()
marketing

22、字符串筛选

str提供了许多功能和方法,可以加快处理文本数据。

例如,我们可以检查字符串是否包含一组特定的字符。典型的用法是否包含单词。

groceries.itemDescription.str.contains('milk').sum()
groceries.itemDescription.str.contains('whole milk').sum()

23、根据长度字符串筛选

我们还可以根据长度(即字符数)筛选字符串。

groceries[groceries.itemDescription.str.len() > 20]\
.itemDescription.unique()
array(['fruit/vegetable juice''packaged fruit/vegetables','frozen potato products''Instant food products','female sanitary products''house keeping products','chocolate marshmallow''long life bakery product','flower soil/fertilizer''preservation products'], dtype=object)

24、绘制变量的分布

pandas 不是数据可视化库,因此未针对可视化任务进行优化。然而,它提供了绘图函数,我认为这使得它非常方便地生成基本绘图。

例如,我们可以创建 kde 绘图以查看工资列的分布。

marketing.Salary.plot(kind='kde', title='Distribution of Salary',figsize=(10,6))

25、创建直方图

我们也可以使用绘图函数来生成直方图。

marketing.Salary.plot(kind='hist', title='Distribution of Salary',figsize=(10,6))

26、月销售额趋势

在此示例中,我们将合并几个操作以创建显示月销售额趋势的绘图。

groceries['month_name'] = groceries['Date'].dt.month_name()
groceries[['month_name','Date']].groupby('month_name').count().plot(title="Monthly Sales", figsize=(10,6))

27、不同列的不同聚合功能

可以按函数对组中的不同列应用不同的聚合函数。我们可以传递一个字典来指示哪些函数将应用于哪些列。

marketing[['Married','Salary','AmountSpent']].groupby(['Married']).agg({'Salary':'mean''AmountSpent':'sum'})

28、NamedAgg

我们将执行与上一示例中相同的操作,更改结果中的列名称。

marketing[['Married','Salary','AmountSpent']].groupby(['Married']).agg(
    Average_salary = pd.NamedAgg('Salary''mean'),
    Total_spent = pd.NamedAgg('AmountSpent''sum'))

29、交叉表功能

交叉选项卡函数用于基于指定的列、值和聚合函数创建交叉表。它类似于数据透视表。

例如,我们可以计算年龄和性别列之间交叉类别的平均工资。

pd.crosstab(index=marketing.Age, columns=marketing.Gender, values=marketing.Salary, aggfunc='mean').round(1)

30、交叉表函数-2

我们将使用交叉表函数执行一个稍微复杂一些的示例。我们可以传递多个列,并显示总体值。

pd.crosstab(index=[marketing.Age, marketing.Married], columns=marketing.Gender,values=marketing.Salary, aggfunc='mean',margins=True).round(1)

31、Pivot_table

它非常类似于交叉表函数,语法上存在一些小差异。我将创建与上一个示例相同的表,使用 pivot_table 函数。

pd.pivot_table(data=marketing, index=['Age''Married'], columns='Gender', values='Salary', aggfunc='mean',margins=True).round(1)

32、拆分字符串

字符串访问器可用于拆分或合并字符串。例如,我们可以拆分数据框中日期的部分以获取日期、月份和年。

请注意,数据类型应为对象或字符串,以便能够应用 str。

groceries['month'] = groceries['Date'].str.split('-', expand=True)[1]

33、在字符级别拆分字符串

我们可以根据字符的位置选择字符串的一部分。考虑前面的示例。我们可能想要检索这些年的最后两个字符。str 访问器允许在字符串上编制索引。

groceries['year'] = groceries['Date'].str.split('-', expand=True)[2].str[-2:]

34、sidetable 侧表

sidetable是 pandas 的附加组件,它使得创建数据框摘要更加容易。它可以被视为值计数和交叉选项卡函数的组合。

pip install sidetable
import sidetable
groceries.stb.freq(['itemDescription'], thresh=25)

Freq 函数返回一个数据帧,该数据框传达了 3 条信息。

  • 每个类别(或value_counts)的观测值数(即行)。
  • 整个列(下列(正常=true)中每个value_counts的百分比。
  • 上述两个的累积版本。

sidetable 提供了更多的功能。如果你刚兴趣可以进一步了解。

35、查找缺失值

缺少值需要非常仔细地处理,以便进行准确和可靠的分析。

isna 函数可以使用 查找数据帧中缺失的值。如果缺少该值,则返回 true。因此,我们可以通过应用 sum 函数来计算缺失值的总数。

groceries.isna().sum()
Member_number      0
Date               0
itemDescription    0

36、处理缺失值

填充函数可用于处理缺失值。它提供了许多选项来填充缺失的值,如平均值、中位数或常量值。

我们还可以使用上一个或下一个值来填充缺失的值。

让我们首先将几个值更改为数据帧中的缺失值。

groceries.iloc[[1,10,30], [1,2]] = np.nan
groceries.isna().sum()
Member_number      0
Date               3
itemDescription    3

我们可以使用最常见的项来填充项目描述列中缺少的值。对于日期列,我们将使用上一个值替换缺失值。

groceries['itemDescription'].fillna(value=groceries['itemDescription'].mode()[0], inplace=True)
groceries['Date'].fillna(method='ffill', inplace=True)
groceries.isna().sum()
Member_number      0
Date               0
itemDescription    0

37、选择数据类型

可以使用select_dtypes函数选择属于或不属于特定数据类型的列。

marketing.select_dtypes(include='object').columns
Index(['Age''Gender''OwnHome''Married''Location''History'], dtype='object')
marketing.select_dtypes(exclude='object').columns
Index(['Salary''Children''Catalogs''AmountSpent'], dtype='object')

38、创建数据帧

DataFrame 函数可用于创建数据帧。字典可以传递到 DataFrame 函数。键将是列名称,值将表示行值。

让我们创建一个数据框。

unique_items = groceries.itemDescription.unique()
prices = pd.DataFrame({
    'itemDescription': unique_items,
    'prices':np.random.randint(10, size=len(unique_items))})

39、合并数据帧

合并函数可用于基于共享列或列合并两个数据框。例如,我们可以根据物料描述列合并数据框。

merged_df = groceries.merge(prices, on='itemDescription')

40、相关性

在执行机器学习任务时,需要考虑数值变量之间的相关性。

corr 函数计算相关性并返回包含变量之间相关系数的矩阵。

文中数据领取方式:

长按扫码,发消息 [40]


浏览 68
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报