You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pyIGRF计算IGRF并导出CSV时数据参数全部相同的问题

问题分析与解决

你的代码问题出在循环赋值的逻辑上,核心错误有两个:

  1. 内层for j in x:完全多余,它会让每次计算的结果重复给整列赋值多次,完全没必要
  2. 直接写df['Inc']=Inc是把整列所有行都设成当前循环的Inc值,而不是只给第i行赋值,所以最后所有行都会变成最后一次循环的计算结果

另外注意:pyIGRF的igrf_value第一个参数是经度(longitude),你代码里写的df['lan'][i]大概率是拼写错误,应该改成df['lon'][i],否则计算结果会出错。

修正后的代码(循环方式)

如果一定要用循环,需要给对应行赋值:

import pyIGRF
import os
import pandas as pd

os.chdir('D:/IGRF')
df = pd.read_csv('igrf.csv')

# 先初始化要新增的列,避免重复创建
df['Inc'] = 0.0
df['Dec'] = 0.0
df['total'] = 0.0

for i in range(len(df)):
    # 注意这里把lan改成lon,确保是经度
    Inc, Dec, Hi, Xn, Yn, Zn, totalmag = pyIGRF.igrf_value(df['lon'][i], df['lat'][i], df['alt'][i], 2022)
    # 给第i行的对应列赋值,而不是整列
    df.loc[i, 'Inc'] = Inc
    df.loc[i, 'Dec'] = Dec
    df.loc[i, 'total'] = totalmag

print(df)
df.to_csv('IGRF_end.csv', index=False)  # 加上index=False避免导出多余的索引列

更高效的方式(推荐用pandas apply)

pandas不建议手动循环行,用apply更简洁高效:

import pyIGRF
import os
import pandas as pd

os.chdir('D:/IGRF')
df = pd.read_csv('igrf.csv')

def calculate_igrf(row):
    # 同样注意经度参数是lon
    Inc, Dec, Hi, Xn, Yn, Zn, totalmag = pyIGRF.igrf_value(row['lon'], row['lat'], row['alt'], 2022)
    return pd.Series([Inc, Dec, totalmag], index=['Inc', 'Dec', 'total'])

# 把计算结果合并到原DataFrame
df[['Inc', 'Dec', 'total']] = df.apply(calculate_igrf, axis=1)

print(df)
df.to_csv('IGRF_end.csv', index=False)

这样修改后,每一行都会对应自己的计算结果,不会出现所有参数相同的问题了。

内容的提问来源于stack exchange,提问作者Amin Karimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:50:34