传递一系列 pandas 数据会引发 KeyError

Passing a range of a pandas data raises KeyError

我这样做一点问题都没有:

fun_abc(datax.time,datax.data,20)

其中 datax 是 pandas.DataFrame,其中 timedata 是列。

但是,当我尝试将范围传递给函数时,我得到 KeyError: 0

fun_abc(datax.time[100:120],datax.data[100:120],20)

我无法理解它。你能帮忙吗? 感谢您的关注!

当您执行 datax.time[100:120] 时,您将无法再访问索引 0。

例如:

In [36]: import pandas as pd

In [37]: import numpy as np

In [38]: df = pd.DataFrame(np.arange(12).reshape(4,3))

In [39]: df[0][1:3]
Out[39]: 
1    3
2    6
Name: 0, dtype: int64

In [40]: df[0][1:3][0]

结果 KeyError: 0

嗨,我知道出了什么问题。

每当将 pandas.Series 对象传递给函数时,它都会带来相应的原始索引。这就是问题所在。

我写了一个额外的检查例程来解决错误:

if isinstance(var_a, pd.Series):
        var_a_ini = var_a.index[0]
    else:
        var_a_ini = var_a[0]

在处理 pandas.Series 的情况下,当您将它的一部分切出以传递给基于索引引用运行的函数时,应格外小心。