如何从DataFrame或数组循环传递多位置参数给Python函数
问题描述
我有一个包含A、B列的.csv文件,数据如下:
| A | B |
|---|---|
| 232.65 | -57.48 |
| 22.69 | -5.46 |
| 23.67 | -7.71 |
已定义一个需要两个位置参数的简单函数:
def add_numbers(n1, n2): answer = n1 + n2 print(answer)
已使用pandas读取文件为DataFrame:
# 读取文件 import pandas as pd df = pd.read_csv(r'myfile.csv') # 检查A列数据 print(df['A']) # 输出: # 0 232.65 # 1 22.69 # 2 23.67 # Name: A, dtype: float64
也将数据转换为numpy数组:
import numpy as np arr = np.loadtxt(r'myfile.csv', delimiter=',') arr # 输出: # array([[232.65, -57.48], # [22.69, -5.46], # [23.67, -7.71]])
尝试过循环、iter、enumerate、apply等方法但始终报错,请问如何将每行的两个值作为参数循环传入该函数?
解决方案
以下是几种可行的实现方式:
方法1:使用Pandas的apply方法
直接对DataFrame的行调用apply,指定axis=1按行处理,将每行的A、B值传入函数:
import pandas as pd def add_numbers(n1, n2): answer = n1 + n2 print(answer) df = pd.read_csv(r'myfile.csv') df.apply(lambda x: add_numbers(x['A'], x['B']), axis=1)
方法2:使用Pandas的iterrows()循环行
通过iterrows()遍历DataFrame的每一行,取出对应列的值传入函数:
import pandas as pd def add_numbers(n1, n2): answer = n1 + n2 print(answer) df = pd.read_csv(r'myfile.csv') for index, row in df.iterrows(): add_numbers(row['A'], row['B'])
方法3:使用Numpy数组遍历
如果用Numpy数组存储数据,直接遍历数组的每一行,解包元素后传入函数:
import numpy as np def add_numbers(n1, n2): answer = n1 + n2 print(answer) arr = np.loadtxt(r'myfile.csv', delimiter=',') for row in arr: add_numbers(*row)
方法4:基础Python直接读取CSV
无需第三方库,直接读取CSV文件逐行处理:
def add_numbers(n1, n2): answer = n1 + n2 print(answer) with open(r'myfile.csv', 'r') as f: # 跳过表头行 next(f) for line in f: a, b = map(float, line.strip().split(',')) add_numbers(a, b)
内容的提问来源于stack exchange,提问作者Joonatan
相关产品推荐
相关产品推荐

