如何在Pandas中计算指定公式并单行输出命名与结果?
解决Pandas单行打印对应列与计算结果的问题
首先,咱们先理清问题:你想要把named列的每个值和对应的计算结果(公式my - all/headers)逐行打印出来,但之前的代码因为把整个Series转成字符串拼接,导致输出不是每行对应的格式。
步骤1:确保数据计算正确
首先先完成计算,建议先新增一个结果列,这样后续处理更清晰:
import pandas as pd # 读取数据(你的原有代码没问题) df = pd.read_csv(file, skiprows=1, names=['all','my','headers','named']) # 计算结果列:注意运算顺序,除法优先级高于减法,和你的公式一致 df['calculated_result'] = df['my'] - df['all'] / df['headers']
步骤2:逐行打印对应的值
接下来有几种简单的方法实现单行打印的需求:
方法一:使用iterrows()遍历每行
这是最直观的方式,逐行读取数据并打印:
for _, row in df.iterrows(): # 可以用f-string格式化输出,还能控制小数位数 print(f"{row['named']} {row['calculated_result']:.2f}")
方法二:用zip()配对两个Series
把named列和结果列配对后遍历,效率比iterrows稍高:
for name, result in zip(df['named'], df['calculated_result']): print(f"{name} {result:.2f}")
方法三:使用apply()逐行处理
用apply指定按行处理,一行代码搞定:
df.apply(lambda row: print(f"{row['named']} {row['calculated_result']:.2f}"), axis=1)
为什么你的原有代码不行?
你之前的代码print(df['named'] + " " + str( (df['my'].astype(float) - df['all'].astype(float)) / df['headers'].astype(float) ))是把整个named Series和整个计算结果的Series转成字符串后拼接,这样会输出类似top bottom [49.19, 35.15]的格式,而不是每行对应的值。
示例输出
针对你给出的测试数据,运行上述代码后会输出:
top 49.19 bottom 35.15
内容的提问来源于stack exchange,提问作者johnnyb
相关产品推荐
相关产品推荐

