gpt4 book ai didi

python - Pandas 用单位插入数据

转载 作者:太空狗 更新时间:2023-10-30 01:29:24 25 4
gpt4 key购买 nike

大家好,

几年来我一直在寻找 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

如何取回深度列中的单位?

我找不到任何方法来放回单元......

任何帮助将不胜感激。谢谢

最佳答案

这里有一种方法可以做你想做的事。

拆分数量并为每个数量创建一组 2 列

In [80]: df = concat([ col.apply(lambda x: Series([x.item(),x.dimensionality.string],
index=[c,"%s_unit" % c])) for c,col in s1.iteritems() ])

In [81]: df
Out[81]:
depth depth_unit
0.0 0.0 m
1.1 1.1 m
2.0 2.0 m

In [82]: df = df.reindex([0,1.0,1.1,1.5,2.0])

In [83]: df
Out[83]:
depth depth_unit
0.0 0.0 m
1.0 NaN NaN
1.1 1.1 m
1.5 NaN NaN
2.0 2.0 m

插值

In [84]: df['depth'] = df['depth'].interpolate(method='values')

传播单位

In [85]: df['depth_unit'] = df['depth_unit'].ffill()

In [86]: df
Out[86]:
depth depth_unit
0.0 0.0 m
1.0 1.0 m
1.1 1.1 m
1.5 1.5 m
2.0 2.0 m

关于python - Pandas 用单位插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19251766/

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