gpt4 book ai didi

python - pandas DataFrame 的插值

转载 作者:太空宇宙 更新时间:2023-11-04 11:19:38 29 4
gpt4 key购买 nike

我有一个 pandas DataFrame(大小 = 34,19),我想将其用作查找表。

但是我想查找的值在数据框中的值“之间”

例如:

      0.1      0.2      0.3     0.4    0.5
0.1 4.01 31.86 68.01 103.93 139.2
0.2 24.07 57.49 91.37 125.21 158.57
0.3 44.35 76.4 108.97 141.57 173.78
0.4 59.66 91.02 122.8 154.62 186.13
0.5 87.15 117.9 148.86 179.83 210.48
0.6 106.92 137.41 168.26 198.99 229.06
0.7 121.73 152.48 183.4 213.88 243.33

我知道要查找 x = 5.5 y = 1.004 的值,所以答案应该在 114 左右。

我用 scipy 的不同方法进行了尝试,但我得到的值总是相差甚远。我使用的最后一个方法是:inter = interpolate.interpn([np.array(np.arange(34)), np.array(np.arange(19))], np_matrix, [x_value, y_value],)
对于网格中确实存在的点,我什至会得到错误的值。

有人可以告诉我我做错了什么或推荐一个简单的任务解决方案吗?


编辑:

另一个问题是:我的原始数据来自 .xlsx 文件,如下所示:

      0.1      0.2      0.3     0.4    0.5
0.1 4.01 31.86 68.01 103.93 139.2
0.2 24.07 57.49 91.37 125.21 158.57
0.3 44.35 76.4 108.97 141.57 173.78
0.4 59.66 91.02 122.8 154.62 186.13
0.5 87.15 117.9 148.86 179.83 210.48
0.6 106.92 137.41 168.26 198.99 229.06
0.7 121.73 152.48 183.4 213.88 243.33

但是 pandas 添加了一个索引列:

               0.1      0.2      0.3     0.4    0.5
0 0.1 4.01 31.86 68.01 103.93 139.2
1 0.2 24.07 57.49 91.37 125.21 158.57
2 0.3 44.35 76.4 108.97 141.57 173.78
3 0.4 59.66 91.02 122.8 154.62 186.13
4 0.8 87.15 117.9 148.86 179.83 210.48
5 1.0 106.92 137.41 168.26 198.99 229.06
6 1.7 121.73 152.48 183.4 213.88 243.33

所以如果我想访问 x = 0.4 y = 0.15 我必须输入 x = 3, y = 0.15。

数据读取方式:

model_references = pd.ExcelFile(model_references_path)
Matrix = model_references.parse('Model_References')
n = Matrix.stack().reset_index().values
out = interpolate.griddata(n[:,0:2], n[:,2], (Stroke, Current), method='cubic')

最佳答案

您可以使用 stack 将数据重新整形为 3 列 - 第一列用于 index,第二列用于列,最后用于值,最后通过 scipy.interpolate.griddata 获取值

from scipy.interpolate import griddata

a = 5.5
b = 1.004

n = df.stack().reset_index().values
#https://stackoverflow.com/a/8662243
out = griddata(n[:,0:2], n[:,2], [(a, b)], method='linear')
print (out)
[104.563]

详细信息:

n = df.stack().reset_index().values
print (n)
[[ 1. 1. 4.01]
[ 1. 2. 31.86]
[ 1. 3. 68.01]
[ 1. 4. 103.93]
[ 1. 5. 139.2 ]
[ 2. 1. 24.07]
[ 2. 2. 57.49]
[ 2. 3. 91.37]
[ 2. 4. 125.21]
[ 2. 5. 158.57]
[ 3. 1. 44.35]
[ 3. 2. 76.4 ]
[ 3. 3. 108.97]
[ 3. 4. 141.57]
[ 3. 5. 173.78]
[ 4. 1. 59.66]
[ 4. 2. 91.02]
[ 4. 3. 122.8 ]
[ 4. 4. 154.62]
[ 4. 5. 186.13]
[ 5. 1. 87.15]
[ 5. 2. 117.9 ]
[ 5. 3. 148.86]
[ 5. 4. 179.83]
[ 5. 5. 210.48]
[ 5. 1. 106.92]
[ 5. 2. 137.41]
[ 5. 3. 168.26]
[ 5. 4. 198.99]
[ 5. 5. 229.06]
[ 6. 1. 121.73]
[ 6. 2. 152.48]
[ 6. 3. 183.4 ]
[ 6. 4. 213.88]
[ 6. 5. 243.33]]

关于python - pandas DataFrame 的插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56291133/

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