gpt4 book ai didi

python - for循环用于数据帧的计算

转载 作者:太空宇宙 更新时间:2023-11-04 07:57:33 24 4
gpt4 key购买 nike

所以,我有一个文本文件,我已将其转换为数据框。我基本上只是试图遍历 H 和 Z 列中的每个值,对它们中的每一个进行平方,然后取平方根(换句话说,毕达哥拉斯定理)。 IE。

F = sqrt(H**2 + Z**2).

我的数据:(在变成 Pandas 数据框之后)

    H        D       Z
0 3235 6764 9546
1 1667 3455 7776
2 3555 3564 5433
3 2344 3333 8777
4 5666 3334 4444

那只是一小部分数据。这里大约有 1000> 行数据。

代码:

import pandas as pd

#load data:

df=pd.read_table('example_data.txt', sep='\s+')

from math import sqrt
for x,y in df:
F=sqrt(H**2+Z**2)
print(F)

产生的错误:

ValueError                                Traceback (most recent call last)
<ipython-input-34-1b1be5be91d0> in <module>()
1 from math import sqrt
----> 2 for x,y in df:
3 F=sqrt(H**2+Z**2)
4 print(F)
5

ValueError: too many values to unpack (expected 2)

就这样吧。我觉得这是一个简单的问题,但 Python 初学者似乎无法解决。它本质上是用 2 个变量多次重复计算。我见过它有 1 个变量,但没有 2 个。

如有任何帮助,我们将不胜感激

干杯!

最佳答案

您应该使用 numpy 对其进行矢量化:

In[11]:
df['F'] = np.sqrt(df['H']**2 + df['Z']**2)
df

Out[11]:
H D Z F
0 3235 6764 9546 10079.252998
1 1667 3455 7776 7952.676593
2 3555 3564 5433 6492.727778
3 2344 3333 8777 9084.605935
4 5666 3334 4444 7200.881335

关于您的错误,DataFrame 返回的可迭代对象是列:

for col in df:
print(col)

H
D
Z
F

因此出现错误,要遍历您使用 iterrows 的行:

from math import sqrt
for x,y in df.iterrows():
F=sqrt(y['H']**2+y['Z']**2)
print(F)

10079.252998114493
7952.676593449529
6492.72777806062
9084.605935317173
7200.881334947827

但对于简单的算术运算,您应该避免循环并寻找矢量化解决方案,例如 numpy,它会比循环快得多,并且在数据大小增加时扩展性更好。

关于python - for循环用于数据帧的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46172753/

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