python apply函数_提升Python效率,这十个Pandas技巧必不可少!

d4bfde746f24f571df1f3b7e0c76fc9b.png

【导语】Pandas 是一个被广泛使用,用于处理结构化数据的 Python 包。虽然已经有很多优质的教程供大家学习,但这次我还是想给大家介绍一些很酷的、可能还不为大家熟悉的技巧,我相信这些小技巧会提升大家处理数据时的效率。

这是小编准备的python学习资料,关注,转发,私信小编“01”即可免费获取!

b1f8ad4bc3bb0c8b7b0437d3c87b95ef.png

1、read_csv

大家都知道这个命令。但是,如果你要读取的数据量很大时,你可以尝试使用一下这个参数:nrows = 5。在实际加载整个数据表之前,只读取表的一小部分。然后,您可以快速发现一些问题,避免使用错误的分隔符 (表并不都是用逗号分隔)。

或者,您可以在 Linux 中使用 head 命令检查任何文本的前 5 行(比如:head - c5 data.txt)

然后,可以使用 df.columns.tolist() 提取所有列,使用 usecols = [' c1 ', ' c2 ',…] 参数来加载所需的列。此外,如果你知道特定列的数据类型,还可以通过添加参数 dtype = {' c1 ': str, ' c2 ': int,…},这样加载速度会更快。这个类型参数的另一个优点是,如果同时存在包含字符串和数字的列,那么将类型作以声明是一个很好的方法,当使用该列作为 key 合并表时就不会出现错误。

2、select_dtypes

在使用 Python 做数据预处理时,这个命令会帮你节省时间。在读取表后,每列的默认数据类型可以是 bool、int64、float64、object、category、timedelta64 或者datetime64。你可以先用该命令获取所有数据类型:

0bfe8472c117112e8426b7bfab2320f2.png

然后执行以下操作,选择所需特征的子数据集。

9762e701944906b380cd7190087d3fe0.png

3、copy

这是一个非常重要的命令。如果你执行以下命令:

27c432afefeb11fb6b5105b0d13c5b4f.png

会发现 df1 发生了变化。这是因为 df2 = df1 不是复制 df1 并将其赋值给df2,而是设置一个指向 df1 的指针。所以 df2 的任何变化都会导致 df1的变化。要解决这个问题,可以使用下面的两种方法:

383d1fb142f36155944a29f8baebe46a.png

或者

682617f77382c6bafcdfb45b1eee3926.png

4、map

这是实现简单数据的转换中一个很 cool 的方法。首先定义一个字典,其中' keys '是旧值,' values '是新值。

8388c117b83cb90feebcc146deeab14d.png

5、apply

如果我们想通过输入其他一些列值来创建一个新列,那么 apply 函数会非常有用。

58b95ac6bd06de0cd9e4f1a84bf5304f.png

在上面的代码中,我们定义了一个(x,y)二输入变量的函数,并使用apply 函数将其应用于“c1”列和“c2”列。

但问题是,apply 方法有时候太慢了。比如,你想计算两列“c1”和“c2”的最大值,可以这样做:

305e894f055c3d55e417ebc65fffa804.png

但是它比下面的这个命令慢得多:

181d4d59da24704f54ba8a819f1c713a.png

注意:如果能用其他内置函数完成相同的程序,就尽量不要用 apply,因为内置函数通常更快。例如,想要将列' c '四舍五入为整数,可以使用 round(df[‘c’], 0),而不是 apply 函数。

6、value counts

这是一个统计查看值分布情况的命令。如果您想看一下“c”列中有多少不同的值,以及每个值出现的频率,可以这样做:

a634a03d054a9ca8ec5ffde5aa161903.png

下面还给大家总结了一些有用的技巧:

A. normalize = True:此句用于检查频率而不是计数。

B. dropna = False:可以在统计中包含缺失值。

C. sort = False:统计信息按值排序而不是按计数排序。

D. df[‘c].value_counts().reset_index():将统计表转换为 panda 数据表再处理。

7、缺失值统计

在构建模型时,如果想要排除缺失值或有缺失值所属的行,可以使用.isnull() 和 .sum() 来处理。

012c9d4c197b01e40d27f334a5ce4acf.png

8、选择具有特定 id 的行

在SQL中,我们可以使用 SELECT * FROM … WHERE ID in (‘A001’, ‘C022’, …) 来获取具有特定 ID 的记录。在 Pandas 中你可以这么做:

5c95644c980d885369b698fe31740bfd.png

9、分组:按照百分比

给一个数值列,希望对该列中的值进行分组,比如前 5% 的值分为 组1,5% - 20% 的值分为 组2,20% -50% 的值分为 组3,剩余 50% 的值分为组4。当然 Pandas 有很多种方法,但在这里提供一种新方法,其运行速度会很快(因为没有使用 apply 函数):

0b253f609f7a7f7365658e02ae4b7397.png

10、to_csv

这是一个大家都会用到的通用的命令。不过我会再单独指出两个使用技巧,第一个是:

070b026fd9c0d4b419eab5a4c6abe711.png

此命令可以准确地打印出将要写入文件的前五行数据。

另一个技巧是 float_format=‘%.0f’。

用于处理整数值和空缺值混合在一起的情况。如果一列同时包含缺失值和整数值,那么写入的数据类型仍然是 float 而不是 int 型。在导出数据表时,可以通过添加 float_format=‘%.0f’ 将所有浮点数四舍五入为整数。如果希望所有列输出的都是整数,那么这个技巧也可以帮你摆脱烦人的 ‘.0’ 格式。

上面的这十个技巧并不是新出现的,也许你也曾在处理数据过程中使用了它们,不过如何可以更巧妙地使用,希望这篇文章给大家新的 idea,下次项目时可以验证一下是否好用,也欢迎大家与我们交流你的经验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值