如何访问Pandas DataFrame中的标称值和不确定性?

fhg3lkii  于 2023-08-01  发布在  其他
关注(0)|答案(4)|浏览(123)

我正在使用uncertainties模块沿着Pandas。目前,我能够输出的dataframe与不确定性一起到一个电子表格。我的主要目标是在相邻列中编写具有不确定性的 Dataframe 。但是如何访问 Dataframe 中的标称值或不确定性。MWE如下所示。

当前输出

| B| B |
| --| ------------ |
| 75.4+/-0.9| 75.4+/-0.9 |
| 53.12+/-0.21| 53.12+/-0.21 |
| 89.51+/-0.32| 89.51+/-0.32 |
| 10.6+/-0.6| 10.6+/-0.6 |
| 39.03+/-0.08| 39.03+/-0.08 |
| 44.61+/-0.35| 44.61+/-0.35 |
| 37.7+/-0.6| 37.7+/-0.6 |
| 50.0+/-0.8| 50.0+/-0.8 |
| 3.1+/-0.5| 3.1+/-0.5 |
| 21.8+/-0.8| 21.8+/-0.8 |

所需输出

| +/-|B| +/-| +/- |
| --|--|--| ------------ |
| 63.2 0.9| 75.4| 0.9| 0.9 |
| 0.05|五十三点一二|零点二一| 0.21 |
| 4.1 0.4|八十九点五一|零点三二| 0.32 |
| 28.2 0.5|十点六|0.6| 0.6 |
| 25.8 0.9|三十九点零三分|零点零八| 0.08 |
| 零点零九|四十四点六一|零点三五| 0.35 |
| 0.13|三十七点七分|0.6| 0.6 |
| 2.4 0.5|五十|0.8| 0.8 |
| 0.92零点二一|3.1| 0.5| 0.5 |
| 零点三四|二十一点八|0.8| 0.8 |

MWE

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

A_n = 100 * np.random.rand(10)
A_s = np.random.rand(10)

B_n = 100 * np.random.rand(10)
B_s = np.random.rand(10)

AB = pd.DataFrame({'A':unumpy.uarray(A_n, A_s), 'B': unumpy.uarray(B_n, B_s)})

AB_writer = pd.ExcelWriter('A.xlsx', engine = 'xlsxwriter', options={'strings_to_numbers': True})
AB.to_excel(AB_writer, sheet_name = 'Data', index=False, na_rep='nan')
AB_writer.close()

字符串

更新

我忘了提到AB不是如MWE中所示创建的,而是MWE中没有给出的先前计算的结果。我为自己创造了一个AB。简而言之,我无法访问A和B的标称值和不确定值。

hwamh0ep

hwamh0ep1#

您可以Map列以获得所需的结果。下面的代码MapA列(确保不要将两列分配给同一列键'+/-'

AB[['A', '+/-']] = AB.A.apply(lambda x: str(x).split('+/-')).to_list()

字符串

b4qexyjb

b4qexyjb2#

将它们分成不同的列:

Au = unumpy.uarray(A_n, A_s)
Bu = unumpy.uarray(B_n, B_s)
AB = pd.DataFrame({'A': unumpy.nominal_values(Au), 'A+/-': unumpy.std_devs(Au), 'B': unumpy.nominal_values(Bu), 'B+/-': unumpy.std_devs(Bu)})

字符串

slhcrj9b

slhcrj9b3#

您可以使用str.split()将每列拆分为一列主值和一列不确定度,如下所示:

# add the column labels here if you have more columns to process
# e.g. `for col in AB[['A', 'B', 'C']]:` if you want to process columns `A`, `B` and `C`
for col in AB[['A', 'B']]:     
    AB[[col, f'{col}+/-']] = AB[col].str.split(r'\+/-', expand=True)

# sort the columns to put the related columns together
AB = AB.sort_index(axis=1)

字符串
不建议在同一数据框中有两列具有相同列标签。在这里,我们将+/-列与它们各自的源列名一起命名,以便区分它们。
这里,我们还使用.sort_index()对列名进行排序,以使相关列彼此相邻。

结果:

print(AB)

       A  A+/-      B  B+/-
0   63.2   0.9   75.4   0.9
1  41.94  0.05  53.12  0.21
2    4.1   0.4  89.51  0.32
3   28.2   0.5   10.6   0.6
4   25.8   0.9  39.03  0.08
5  27.26  0.09  44.61  0.35
6  25.04  0.13   37.7   0.6
7    2.4   0.5   50.0   0.8
8   0.92  0.21    3.1   0.5
9  57.69  0.34   21.8   0.8

ubbxdtey

ubbxdtey4#

所有的答案都没有考虑到OP正在使用uncertainties包。问题from this postthe user manual的正确答案是使用

unumpy.nominal_values(arr)

字符串
和/或

unumpy.std_devs(arr)


其中arr是pandas列

相关问题