[英]Python - Applying function to 2D array
我有一个从 CSV 电子表格转换而来的二维数组,其中包含使用 pandas 的数据。我想对还包含数组元素的数据应用 function。
我的function:
def calc_pol(a, b, R = 0.08314462618, T = 298.15):
return a * b * R * T
我可以按以下方式在数据数组上调用它,其中 a 和 b 由数据数组确定:
calc_pol(
a = data[0,0], b=data[0,1]
)
这将返回我正在寻找的值。 现在,电子表格的组织是在列中,所以数据合并的方式是,如果我:
print(data[0])
我得到以下(任意)值:
20 40 60 80 100 120
我想提供我的 function 20*40 (data[0,0]| * data[0,1]) --> 在新数组中保存值。 60 * 80 (data[0,2]| * data[0,3]) --> 在新数组中保存值并对 80 * 100 执行相同操作。
每个“列”都有 80 个值,所以我想通过使用 for 循环或其他一些 function 在 0: 80 范围内迭代 i 但我不确定如何继续,我的索引一直“超出范围。我感谢您提供的任何见解!
您所描述的听起来像是 pandas 中的简单列操作,如果您有列名,则无需使用数字索引或 for 循环:
import pandas as pd
df = pd.DataFrame({'c'+str(i):[i]*4 for i in range(6)})
def calc_pol(df, col1, col2, R = 0.08314462618, T = 298.15):
return df[col1] * df[col2] * R * T
df['c6'] = calc_pol(df, 'c1', 'c2', R = 0.08314462618, T = 298.15)
df['c7'] = calc_pol(df, 'c3', 'c4', R = 0.08314462618, T = 298.15)
c0 c1 c2 c3 c4 c5 c6 c7
0 0 1 2 3 4 5 49.579141 297.474844
1 0 1 2 3 4 5 49.579141 297.474844
2 0 1 2 3 4 5 49.579141 297.474844
3 0 1 2 3 4 5 49.579141 297.474844
您可以使用列表理解并将所有结果存储在res
列表中:
number_of_rows = 80
res = [calc_pol(a = data[0,i], b=data[0,i+1]) for i in range(number_of_rows - 1)]
此时res[0]
包含20*40
, res[1]
包含60 * 80
等等......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.