前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在数据框架中创建计算列

在数据框架中创建计算列

作者头像
fanjy
发布2022-04-13 13:42:19
3.8K0
发布2022-04-13 13:42:19
举报
文章被收录于专栏:完美Excel

标签:Python与Excel,pandas

在Excel中,我们可以通过先在单元格中编写公式,然后向下拖动列来创建计算列。在PowerQuery中,还可以添加“自定义列”并输入公式。在Python中,我们创建计算列的方式与PQ中非常相似,创建一列,计算将应用于这整个列,而不是像Excel中的“下拉”方法那样逐行进行。要创建计算列,步骤一般是:先创建列,然后为其指定计算。

准备演示用的数据框架

我们将从百度百科获取世界500公司名称和相关信息:

https://baike.baidu.com/item/%E4%B8%96%E7%95%8C500%E5%BC%BA/640042?fr=aladdin

import pandas as pd

df = pd.read_html('https://baike.baidu.com/item/%E4%B8%96%E7%95%8C500%E5%BC%BA/640042?fr=aladdin')[1]

下面是获取的表。

图1

在pandas中创建计算列的关键

如果有Excel和VBA的使用背景,那么一定很想遍历列中所有内容,这意味着我们在一个单元格中创建公式,然后向下拖动。然而,这不是Python的工作方式。其正确的计算方法类似于Power Query,对整个列执行操作,而不是循环每一行。基本上,我们不会在pandas中循环一列,而是对整个列执行操作。这就是所谓的“矢量化”操作。Power Query似乎可以做到这一点,但效率不如Python。

panda数据框架中的字符串操作

让我们看看下面的示例,从公司名称列中拆分中文和英文名称。df[‘公司名称’]是一个pandas系列,有点像Excel或Power Query中的列。df[‘公司名称’].str是列中的字符串值,这意味着我们可以直接对其使用字符串方法。通过这种方式进行操作,我们不会一行一行地循环遍历。

图2

数据框架中的日期时间操作

为便于演示,我们使用下面网站中的数据:

http://fund.eastmoney.com/company/default.html

图3

我们要计算基金公司成立的年数,可以使用“成立时间”列来推导这个公式。首先,我们需要知道该列中存储的数据类型,这可以通过检查列中的第一项来找到答案。

图4

很明显,该列包含的是字符串数据。

将该列转换为datetime对象,这是Python中日期和时间的标准数据类型。记住,我们永远不应该循环每一行来执行计算。pandas实际上提供了一种将字符串值转换为datetime数据类型的便捷方法。

df['成立时间'] =pd.to_datetime(df['成立时间'])

一旦列为datetime数据类型,计算持续时间就变得很容易了。我们将导入datetime库来处理日期和时间。

import datetime

today = datetime.datetime.today()

days = today - df['成立时间']

df['成立年数'] =days.dt.days / 365

其中,days是一个pandas系列,包含从“成立时间”到今天的天数。如果检查其类型,它会显示timedelta:

图5

timedelta是datetime的一个子类。与我们刚才看到的.str类似,pandas还有一个.dt返回datetime对象的列。因此,days.dt.days只是从timedelta对象返回天数的整数值。然后,将这些数字除以365,我们得到一列年数。

处理数据框架中NAN或Null值

当单元格为空时,pandas将自动为其指定NAN值。我们需要首先考虑这些值,因为在大多数情况下,pandas不知道如何处理它们。我们可以使用.fillna()方法将NAN值替换为我们想要的任何值。出于演示目的,这里只是将NAN值替换为字符串值“0”。

图6

数据类型转换 & 数据框架上的简单算术运算

最后,我们将使用“成年年份”列来计算公司的年龄。

df['成立年份'] = df['成立时间'].str.split("-",expand=True)[0]

无需检查数据类型,我们知道这个新创建的列包含字符串数据,因为.split()方法将返回一个字符串。注意,必须先把字符串转换成数字。由于今年是2021年,我们将用它来估算公司的年龄,从2021年减去每个“成立年份”。

df['成立年份'] = df['成立年份'].astype(int)

df['公司年龄'] = 2021 -df['成立年份']

图7

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档