python使用不确定数据帧最小值包

2024-05-16 18:31:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在组合pandas数据帧和ufloat,如下所示。在一段时间内工作得很好,现在如果我想在ufloat列上使用nsmallest函数,我有一个问题。这是错误消息:

TypeError: Column 'x' has dtype object, cannot use method 'nsmallest' with this dtype

也许将ufloat放入数据帧不是最好的主意。有没有更好的方法来组合不确定性和数据帧?或者我们可以轻松地解决这个问题吗

import numpy as np
import pandas as pd
from uncertainties import unumpy as unp

x = unp.uarray([1, 2, 3], [0.11, 0.21, 0.3])
y = unp.uarray([5, 4, 3], [0.21, 0.08, 0.23])
bar = np.array([7.2, 5.1, 3.7])

df = pd.DataFrame({ 'x':x, 'y':y, 'bar':bar })
df["z"] = df["x"]**2 + 2*df["y"]
df["zz"] = 1/df["x"] + unp.sin(df["y"])

print df.nsmallest(1, "x")

编辑:所需的输出是完整的数据帧(类似于print df.nsmallest(1,“bar”)),只针对具有最小unumpy.nominal_值(df[“x”])的条目。在这种特殊情况下,这与nlargest(1,“bar”)相同,因此

   bar            x            y           z           zz
0  7.2  1.00+/-0.11  5.00+/-0.21  11.0+/-0.5  0.04+/-0.13

Tags: 数据importpandasdfasnpbarpd
1条回答
网友
1楼 · 发布于 2024-05-16 18:31:47

下面的代码可能会对您有所帮助

import numpy as np
import pandas as pd
from uncertainties import unumpy as unp

x = unp.uarray([1, 2, 3], [0.11, 0.21, 0.3])
y = unp.uarray([5, 4, 3], [0.21, 0.08, 0.23])
bar = np.array([7.2, 5.1, 3.7])

df = pd.DataFrame({ 'x':x, 'y':y, 'bar':bar })
df["z"] = df["x"]**2 + 2*df["y"]
df["zz"] = 1/df["x"] + unp.sin(df["y"])

# print(df)

temp_smallest_nominal = df['x'].apply(lambda x : x.nominal_value).nsmallest(1)
temp_largest_nominal = df['x'].apply(lambda x : x.nominal_value).nlargest(1)
print(df.loc[df.index == temp_smallest_nominal.index[0]])
print(df.loc[df.index == temp_largest_nominal.index[0]])


temp_smallest_std_devs = df['x'].apply(lambda x : x.std_dev).nsmallest(1)
temp_largest_std_devs = df['x'].apply(lambda x : x.std_dev).nsmallest(1)
print(df.loc[df.index == temp_smallest_std_devs.index[0]])
print(df.loc[df.index == temp_largest_std_devs.index[0]])


temp_list_of_smallest = df['x'].apply(lambda x : x.nominal_value).nsmallest(2)
print(df.loc[df.index.isin(temp_list_of_smallest.index)])

temp\u minimen\u nominal用于筛选具有最小标称值的行

temp\u minimable\u std\u devs用于筛选具有最小std\u dev值的行

最小值的临时列表用于筛选具有“n”最小值的行

对于最大值也是如此

如果您想根据不同的基础过滤数据,也可以更改lambda函数

相关问题 更多 >