筛选特定字符串 python_40 道实战练习题让你轻松玩转 Python

992918d6595e4d1d9900fc295bd94686.png
欢迎关注@Python与数据挖掘 ,专注Python、数据分析、数据挖掘、好用工具!

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

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

文中数据提取码: k9ru

地址: 数据链接

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")

8b90e9ff2943fa63106057250fa800fe.png

2、使用 astype 更改数据类型

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

groceries.dtypes

1c3c62f7aba1f707e91189144c815e01.png

我们也可以使用 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([3737, 2433, 3915, 2625])].shape

6、~ 操作符

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

groceries[~groceries.Member_number.isin([3737, 2433, 3915, 2625])].shape
(38639, 3)

7、值计数与规范化

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

marketing.Catalogs.value_counts(normalize=True)

2cd0e1883ce95d7d31ba9dbb926dc7e3.png

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
(400, 10)

12、组合数据框

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

less.shape, marketing.shape
((400, 10), (1000, 10))
new = pd.concat([marketing, less])
new.shape
(1400, 10)

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

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

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

marketing.iloc[:4,:3]

b05bd561c9a6d4b2a9d714ee22dd49ea.png

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

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

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

6e541408b6aeffeb376de54782933e0c.png

15、按标签选择行和列

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

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

5e61766fa71de3a8498f0952f8501dd7.png

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)

21b3a63437004f207b5fc99c3e8a7c11.png

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()

dc8b1068ccc0f4e8cab027e3c1636abc.png

21、累计和

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

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

a68e46f577e753c3f88d348307c27ef6.png

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))

4e5649af538d6db158fcf5222fe980c8.png

25、创建直方图

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

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

532d8769441b7b086a03385500ccad12.png

26、月销售额趋势

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

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

9f4db4d683093d76c0718e66983ee67e.png

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

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

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

f951ae587b2de599755e04aee0c5b0e4.png

28、NamedAgg

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

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

924ed331453e7e74b80ec0ed6d893cf1.png

29、交叉表功能

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

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

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

b6c43aa5421dcb90445e5d7604d2fa60.png

30、交叉表函数-2

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

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

a9a09669525f5f7d767061f7252f07d2.png

31、Pivot_table

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

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

2ab85726d41a31bd4c61858edce4d29e.png

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)

38c97ceae0a6b8b5d655b234c53f7273.png

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 函数计算相关性并返回包含变量之间相关系数的矩阵。

marketing.corr() 

37e33eb34ccf47b73e8909315d5bf998.png

码字不易,有所收获,点个赞和爱心❤️

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值