【发布时间】:2013-10-15 21:02:34
【问题描述】:
大家好,
几年来我一直在寻找 Stackoverflow,它对我有很大帮助,以至于我以前从未注册过 :)
但是今天我在使用 Python 和 Pandas 和 Quantities 时遇到了一个问题(也可能是 unum 或 pint)。我尽力写一个清晰的帖子,但由于这是我的第一个帖子,如果有什么令人困惑的地方,我深表歉意,并会尝试纠正你会发现的任何错误:)
我想从一个源导入数据并构建一个 Pandas 数据框,如下所示:
import pandas as pd
import quantities as pq
depth = [0.0,1.1,2.0] * pq.m
depth2 = [0,1,1.1,1.5,2] * pq.m
s1 = pd.DataFrame(
{'depth' : [x for x in depth]},
index = depth)
这给出了:
S1=
depth
0.0 0.0 m
1.1 1.1 m
2.0 2.0 m
现在我想将数据扩展到 depth2 值: (显然没有必要在深度上插入深度,但在变得更复杂之前这是一个测试)。
s2 = s1.reindex(depth2)
这给出了:
S2=
depth
0.0 0.0 m
1.0 NaN
1.1 1.1 m
1.5 NaN
2.0 2.0 m
目前没问题。
但是当我尝试插入缺失值时:
s2['depth'].interpolate(method='values')
我收到以下错误:
C:\Python27\lib\site-packages\numpy\lib\function_base.pyc in interp(x, xp, fp, left, right)
1067 return compiled_interp([x], xp, fp, left, right).item()
1068 else:
-> 1069 return compiled_interp(x, xp, fp, left, right)
1070
1071
TypeError: Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe'
我了解 numpy 的插值不适用于对象。
但如果我现在尝试通过删除单位来插入缺失值,它会起作用:
s3 = s2['depth'].astype(float).interpolate(method='values')
这给出了:
s3 =
0.0 0
1.0 1
1.1 1.1
1.5 1.5
2.0 2
Name: depth, dtype: object
如何取回深度列中的单位?
我找不到任何技巧来放回设备...
任何帮助将不胜感激。 谢谢
【问题讨论】:
-
为什么不将所需列中的所有内容乘以 1 米?
-
你的意思是像
s2['depth'] * pq.m?这没用。它总是无视单位。不管我尝试什么组合。 -
有一些关于支持这一点的讨论。在此处查看 github 问题:github.com/pydata/pandas/issues/2494
-
我一直在使用这个 github 页面来获取 pandas 中的单位。但我找不到插值后让它们恢复的方法。
-
另见github问题#10349