首页 > 编程问答 >pct_change() 的第一个值是否可能无法得到 NaN?

pct_change() 的第一个值是否可能无法得到 NaN?

时间:2024-08-09 14:55:45浏览次数:9  
标签:python pandas dataframe

我的数据帧是:

import pandas as pd 
df = pd.DataFrame(
    {
        'a': [20, 30, 2, 5, 10]
    }
)

预期输出是 pct_change() a

    a  pct_change
0  20  -50.000000
1  30   50.000000
2   2  -93.333333
3   5  150.000000
4  10  100.000000

我想将 df.a.iloc[0] 与40进行比较 pct_change 的第一个值。如果我使用 df['pct_change'] = df.a.pct_change().mul(100) ,第一个值是 NaN

我的尝试:

def percent(a, b):
    result = ((a - b) / b) * 100
    return result.round(2)

df.loc[df.index[0], 'pct_change'] = percent(df.a.iloc[0], 40)

我有更好/更有效的方法吗?


当然!以下是如何在 pct_change() 中处理第一个值的不同方法:

1. 设置自定义基准

无需单独计算第一个百分比变化,可以将第一个值与所需的基准(在本例中为 40)一起包含在 DataFrame 中,然后应用 pct_change()

import pandas as pd

df = pd.DataFrame({'a': [20, 30, 2, 5, 10]})

# 在开头插入基准值
df.loc[-1] = [40]  
df = df.sort_index().reset_index(drop=True)

# 现在计算 pct_change()
df['pct_change'] = df['a'].pct_change().mul(100)

print(df)

输出:

    a  pct_change
0  40         NaN
1  20  -50.000000
2  30   50.000000
3   2  -93.333333
4   5  150.000000
5  10  100.000000

2. 使用 fillna() 替换 NaN

在计算 pct_change() 之后,可以使用的自定义函数计算的第一个值替换 NaN 值:

import pandas as pd

df = pd.DataFrame({'a': [20, 30, 2, 5, 10]})

df['pct_change'] = df['a'].pct_change().mul(100)

def percent(a, b):
    result = ((a - b) / b) * 100
    return result.round(2)

df['pct_change'] = df['pct_change'].fillna(percent(df['a'].iloc[0], 40))

print(df)

输出:

    a  pct_change
0  20  -50.00
1  30   50.00
2   2  -93.33
3   5  150.00
4  10  100.00

哪个方法更好?

  • 方法 1(设置自定义基准): 如果始终需要相对于固定基准的百分比变化,则此方法更直接、更有效。
  • 方法 2(使用 fillna() ): 如果需要在计算 pct_change() 后灵活处理第一个值或对第一个值应用不同的逻辑,则此方法更灵活。

希望有帮助!如果有任何其他问题,请告诉我。

标签:python,pandas,dataframe
From: 78851490

相关文章

  • 零基础学习人工智能—Python—Pytorch学习(三)
    前言这篇文章主要两个内容。一,把上一篇关于requires_grad的内容补充一下。二,介绍一下线性回归。关闭张量计算关闭张量计算。这个相对简单,阅读下面代码即可。print("============关闭require_grad==============")x=torch.randn(3,requires_grad=True)print(x)x.requir......
  • python配置pip镜像
    Python配置pip的镜像国内的网络通过pip下载软件包只有不到10k的下载速度。不仅下载的慢,还容易引发超时错误,导致下载失败。而将给pip配置国内的镜像源可以完美的解决这个问题。本文讲解了pip在windows和macos/linux的配置过程(在windows实操成功)一、找到配置文件1.windows在......
  • Pytorch深度学习入门基础(三):python 加载数据初认识
    目录 一、 导入二、数据集中数据和label的组成形式三、Dataset读入数据四、Dataset类代码实战4.1创建函数4.2  设置初始化函数4.3读取每一个图片4.4设置获取数据长度函数4.5创建实例4.5.1单个图片数据集4.5.2 多个图片数据集    现在来开......
  • python多版本共存和虚拟环境
    多版本共存1.调用方式"py-3.10",即可使用对应版本的python虚拟环境1.vscode底部切到CMD,敲"py-3.8-mvenv.venv"(虚拟环境文件夹名,通常用".venv")2.点击vscode右下角,选择虚拟环境作为解释器注:以"."开头的文件在计算机系统中通常被称为隐藏文件。这些文件在许多操作系统中默认是不......
  • Python练习:数据类型篇
    一、逻辑推理练习  1、在不运行下面程序的前提下,说出答案。 1.4.0==42."4.0"==43.bool("1")4.bool("0")5.str(32)6.int(6.26)7.float(32)8.float("3.21")9.int("434")10.int("3.42")11.bool(-1)12......
  • MySQL——使用Python操作MySQL
    文章目录安装PyMySQL使用PyMySQL操作MySQL在Python中操作MySQL数据库时,我们使用较多的库是PyMySQL,如果你选择使用PyMySQL库,那么首先需要通过pip安装它。pipinstallpymysql命令就是用来安装PyMySQL的。安装PyMySQL1.打开你的命令行工具(如cmd、PowerShell、......
  • Python按条件删除Excel表格数据的方法
      本文介绍基于Python语言,读取Excel表格文件,基于我们给定的规则,对其中的数据加以筛选,将不在指定数据范围内的数据剔除,保留符合我们需要的数据的方法。  首先,我们来明确一下本文的具体需求。现有一个Excel表格文件(在本文中我们就以.csv格式的文件为例),如下图所示。  其中,Ex......
  • Python 提取出SQL语句中Where的值的方法
    1.方法一:使用sqlparse库的方法为了提取SQL语句中WHERE子句的值,我们可以利用Python的sqlparse库,这是一个专门用于解析SQL语句的库。以下是一个示例代码,演示如何使用sqlparse来提取WHERE子句中的条件。首先,确保安装了sqlparse库。如果未安装,可以使用pip安装:bash复制代码pipins......
  • 12-python函数的传参——形参、实参、装包 *args和**kwargs
    函数的参数1形参和实参函数的参数:在定义函数时,可以再函数名后()中定义数量不等的形参,注意可以有也可以没有,可有一个也可有多个,多个形参之间用逗号隔开形参(形式参数):定义形参就相当于在函数内部声明了变量,但是并不赋值实参(实际参数):在函数定义时指定了形参,在调用的时......
  • 《信息学奥赛一本通编程启蒙》3031-3050(Scratch、C、C++、python)
    3031:练7.3买图书(C、C++、python)3031:练7.3买图书(C、C++、python)-CSDN博客3032:练7.4梯形面积(C、C++、python)3032:练7.4梯形面积(C、C++、python)-CSDN博客3033:【例8.1】人民币支付(Scratch、C、C++、python)3033:【例8.1】人民币支付(Scratch、C、C++、python)-CSDN博客3......