gpt4 book ai didi

python - 即使填充了大部分数据也无法插入数据帧

转载 作者:太空狗 更新时间:2023-10-29 20:38:36 25 4
gpt4 key购买 nike

我尝试使用 interpolate() 方法在我的 DataFrame 中插入 NaN。但是,该方法失败并出现错误:

Cannot interpolate with all NaNs.

代码如下:

try:
df3.interpolate(method='index', inplace=True)
processor._arma(df3['TCA'])
except Exception, e:
sys.stderr.write('%s: [%s] %s\n' % (time.strftime("%Y-%m-%d %H:%M:%S"), nid3, e))
sys.stderr.write('%s: [%s] len=%d\n' % (time.strftime("%Y-%m-%d %H:%M:%S"), nid3, len(df3.index)))
sys.stderr.write('%s: [%s] %s\n' % (time.strftime("%Y-%m-%d %H:%M:%S"), nid3, df3.to_string()))

这很奇怪,因为大部分数据已经填满了,如您在log 1log 2 中所见。 dataframe 的长度为 20,如下所示的所有数据。即使每个单元格都已填充,我仍然无法使用插值方法。顺便说一句,df3 是一个global 值,我不确定这是否会成为问题。


日志 1

2016-01-21 22:06:11: [ESIG_node_003_400585511] Cannot interpolate with all NaNs.
2016-01-21 22:06:11: [ESIG_node_003_400585511] len=20
2016-01-21 22:06:11: [ESIG_node_003_400585511]
TCA TCB TCC
2016-01-21 20:06:22 19 17 18
2016-01-21 20:06:23 19 17 18
2016-01-21 20:06:24 18 18 18
2016-01-21 20:06:25 18 17 18
2016-01-21 20:06:26 18 18 18
2016-01-21 20:06:27 19 18 18
2016-01-21 20:06:28 19 17 18
2016-01-21 20:06:29 18 18 18
2016-01-21 20:06:30 18 17 18
2016-01-21 20:06:31 19 17 18
2016-01-21 20:06:32 18 17 18
2016-01-21 20:06:33 18 18 18
2016-01-21 20:06:34 19 18 18
2016-01-21 20:06:35 18 17 18
2016-01-21 20:06:36 19 18 18
2016-01-21 20:06:37 18 18 18
2016-01-21 20:06:38 18 18 18
2016-01-21 20:06:39 19 18 18
2016-01-21 20:06:40 18 17 18
2016-01-21 20:06:41 18 18 18

日志 2

2016-01-21 22:06:14: [ESIG_node_003_400585511] Cannot interpolate with all NaNs.
2016-01-21 22:06:14: [ESIG_node_003_400585511] len=20
2016-01-21 22:06:14: [ESIG_node_003_400585511]
TCA TCB TCC
2016-01-21 20:06:33 18 18 18
2016-01-21 20:06:34 19 18 18
2016-01-21 20:06:35 18 17 18
2016-01-21 20:06:36 19 18 18
2016-01-21 20:06:37 18 18 18
2016-01-21 20:06:38 18 18 18
2016-01-21 20:06:39 19 18 18
2016-01-21 20:06:40 18 17 18
2016-01-21 20:06:41 18 18 18
2016-01-21 20:06:42 NaN NaN NaN
2016-01-21 20:06:43 NaN NaN NaN
2016-01-21 20:06:44 NaN NaN NaN
2016-01-21 20:06:45 NaN NaN NaN
2016-01-21 20:06:46 19 18 18
2016-01-21 20:06:47 18 17 18
2016-01-21 20:06:48 18 18 18
2016-01-21 20:06:49 19 18 18
2016-01-21 20:06:50 18 17 18
2016-01-21 20:06:51 18 18 18
2016-01-21 20:06:52 19 17 18

最佳答案

检查您的 DataFrame 是否具有numeric dtypes,而不是object dtypes。这TypeError: Cannot interpolate with all NaNs 如果 DataFrame包含 object dtype 的列。例如,如果

import numpy as np
import pandas as pd

df = pd.DataFrame({'A':np.array([1,np.nan,30], dtype='O')},
index=['2016-01-21 20:06:22', '2016-01-21 20:06:23',
'2016-01-21 20:06:24'])

然后 df.interpolate() 引发 TypeError。

要检查您的 DataFrame 是否包含对象数据类型的列,请查看 df3.dtypes:

In [92]: df.dtypes
Out[92]:
A object
dtype: object

要解决此问题,您需要确保 DataFrame 具有数字列原生 NumPy 数据类型。显然,最好构建 DataFrame从一开始就正确。所以最好的解决方案取决于你如何构建 DataFrame。

一个不太吸引人的修补程序是使用 pd.to_numeric 事后将对象数组转换为数值数组:

for col in df:
df[col] = pd.to_numeric(df[col], errors='coerce')

使用 errors='coerce',任何无法转换为数字的值都将转换为 NaN。在每一列上调用 pd.to_numeric 后,请注意 dtype 现在是 float64:

In [94]: df.dtypes
Out[94]:
A float64
dtype: object

一旦 DataFrame 具有数字数据类型,并且 DataFrame 具有 DatetimeIndex,则 df.interpolate(method='time') 将起作用:

import numpy as np
import pandas as pd

df = pd.DataFrame({'A':np.array([1,np.nan,30], dtype='O')},
index=['2016-01-21 20:06:22', '2016-01-21 20:06:23',
'2016-01-21 20:06:24'])

for col in df:
df[col] = pd.to_numeric(df[col], errors='coerce')
df.index = pd.DatetimeIndex(df.index)
df = df.interpolate(method='time')
print(df)

产量

                        A
2016-01-21 20:06:22 1.0
2016-01-21 20:06:23 15.5
2016-01-21 20:06:24 30.0

关于python - 即使填充了大部分数据也无法插入数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34934511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com