初学者的10种Python技巧

使用Python直观易懂的语法,任何人都可以访问令人印象深刻的科学计算功能。Python已成为数据科学和机器学习的标准语言,并且 在Stack Overflow的2020开发人员调查中被评为 最受欢迎的三大语言 。


#10 —列表推导式

 
列表推导是一种用于处理列表的简单单行语法,可让您访问列表的各个元素并对其执行操作。

语法由括号组成,该括号包含类似的表达式 print(plant),后跟forand和orif子句。

greenhouse = ['boat orchid', 'bird\'s nest fern', 'dancing-lady orchid',
              'nun\'s hood orchid', 'pennywort', 'snake plant', 
'maidenhair fern', 'chinese ground orchid', 
'vanilla orchid', 'tiger orchid', 'pothos']


[print(plant) for plant in greenhouse if 'orchid' in plant];

将打印:

boat orchid
dancing-lady orchid
nun's hood orchid
chinese ground orchid
vanilla orchid
tiger orchid

(注意:列表推导末尾的分号将禁止打印Jupyter Notebook单元格最后一行的输出。这样,Jupyter Notebook不会同时打印列表 None。)


#9 —单行if语句

 
与前面的技巧一起,单行if可以帮助您使代码更简洁。

假设我们已经决定对确定植物是否为兰花感兴趣。对于单行-if,我们从测试条件为真时要输出的值开始。

此代码将单行(如果具有列表理解)组合以输出1(其中植物是兰花),否则输出0。

[1 if 'orchid' in plant else 0 for plant in greenhouse]

将输出:

[1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0]

这个列表本身并不是那么有趣,但是当与下一个技巧结合使用时,我们将看到单行if的实际用法。


#8 —将lambda应用于DataFrame列

 
pandas DataFrame是一种可以保存表格数据的结构,例如Excel for Python。 lambda 是关键字,提供了对表中的值执行操作的快捷方式。

假设我们有一个有关温室植物的信息表:

import pandas as pd


data = pd.DataFrame({'plant': greenhouse,
'height_(cm)': [50, 20, 15, 40, 50, 
60, 45, 50, 50, 20, 20],
'condition': ['full sun', 'shade', 'partial sun', 'partial sun', 'partial sun', 
'full sun', 'shade', 'partial sun', 'full sun', 'partial sun', 'full sun'],
'water_(cm/week)': [2.5, 4, 2.5, 2.5, 3, 
0.5, 4.5, 2.5, 2, 2.5, 2.5],
'music': ['bach', 'bach', 'beyonce', 'bach', 'cardi b', 
'nicki', 'bach', 'bach', 'vivaldi', 'cardi b', 'bach']})

打印此DataFrame将显示以下内容:

假设我们想知道某个植物是否更喜欢某个德国古典作曲家。

data[‘music’].apply(lambda x: 1 if x == ‘bach’ else 0)

将输出:

其中第一列是DataFrame索引,第二列是代表单行if输出的系列。

lambda 代表“匿名函数”。它使我们能够对DataFrame中的值执行操作,而无需创建正式函数-即带有def and return 语句的函数 ,我们将在稍后介绍。


#7-将条件应用于多列

 
假设我们要确定哪些喜欢巴赫的植物也需要充足的阳光,因此我们可以将它们放在温室中。

def sunny_shelf(col1, col2):
return  (1 if ((col1 == 'full sun') & (col2 == 'bach')) else 0)


data['new_shelf'] = data.apply(lambda x: sunny_shelf(x.condition, x.music), axis=1)

首先,我们通过使用def 关键字并为其命名并在单词之间加下划线的名称(例如,sunny_shelf)来创建函数 。

函数sunny_shelf接受两个参数作为其输入-用于检查“full sun”的列和用于检查“ bach”的列。函数输出这两个条件是否都成立。

在第4行,我们  将此函数.apply()应用于DataFrame并指定应将哪些列作为参数传递。 axis=1 告诉pandas它应该跨列评估函数(与之相对 axis=0,后者跨行评估)。我们将.apply()函数的输出分配给名为“ new_shelf”的新DataFrame列。

或者,我们可以将 np.where() 函数用于相同的目的:

import numpy as np


data['new_shelf'] = np.where(  (data['condition'] == 'full sun') 
                             & (data['music'] == 'bach'), 1, 0)

numpy库中的此 函数 检查上面指定的两个条件(即,植物是充满阳光和日耳曼古典音乐的爱好者),并将输出分配给“ new_shelf”列。


#6 —分解一长行代码

 
顺便说一句,您可以在多行中将括号,方括号或大括号内的任何语句分开,以免单行运行时间过长。初始化温室清单,创建植物数据框并使用np.where()函数时,我们已经看到了这一点。

根据 PEP8,Python样式指南:

包装长行的首选方法是在括号,方括号和花括号内使用Python的隐含行连续性。


#5 —读取.csv并设置索引

 
假设该表包含一个唯一的植物标识符,我们希望将其用作DataFrame中的索引。我们可以使用index_col参数进行设置。

data = pd.read_csv('greenhouse.csv', index_col='plant_id')


#4—格式为货币

 
无论如何,我们在这些植物上花了多少钱?让我们将此计算的输出格式设置为money。

‘${:,.2f}’.format(data[‘price’].sum())

将输出:

'$15,883.66'

逗号分隔符使您很容易看到到目前为止我们已经损失了多少现金。


#3-创建数据透视表

 

接下来,假设我们要查看每个植物物种花费的金额。我们可以使用pd.pivot_table() 或 .groupby()进行聚合 。

pd.pivot_table(data, index=’plant’, values=’price’, aggfunc=np.sum)

要么

data[[‘plant’,’price’]].groupby(by=’plant’).sum()

这两种方法都将输出以下内容:

我们还可以使用这两种方法指定多级数据透视表。

data['orchid'] = data['plant'].apply(lambda x: 1 if 'orchid' in x else 0)


piv = pd.pivot_table(data2, index=['orchid', 'plant'], values='price', aggfunc=np.sum)
piv0 = data[['orchid','plant','price']].groupby(by=['orchid','plant']).sum()

检查 piv.equals(piv0) 产生True。

这是生成的DataFrame的样子:


#2—计算总数的百分比

 
对每种植物物种如何造成温室总成本感到好奇吗?将每个值除以所有行的总和,然后将该输出分配给名为“ perc”的新列:

piv['perc'] = piv['price'].div(piv['price'].sum(axis=0))


#1 —按多列排序

 
最后,让我们对DataFrame进行排序,以使兰花位于顶部,而植物则按降序排列。

piv.sort_values([‘orchid’,’price’], ascending=False)

 
在本文中,我们介绍了10种Python技能,这些技能可能对初学者数据科学家有用。

我希望这篇文章能帮助您提高新数据科学家的技能。


  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论

打赏作者

The_syx

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值