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

Pandas如何对CSV每行经纬度数据应用公式批量生成复数列表

问题说明

我有一份存储全美城市经纬度信息的CSV文件,读取数据的初始代码如下:

%matplotlib inline
from __future__ import division
# from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
import random
import time
import itertools
import urllib
import csv
import pandas as pd

df = pd.read_csv("USA_BIG_MAP.csv")
df.loc[0:6]
df.dtypes

读取到的前7行数据样例:

ID  LAT LON Location
0   [ANB]   33.58   85.85   Anniston,AL
1   [AUO]   32.67   85.44   Auburn,AL
2   [BHM]   33.57   86.75   Birmingham,AL
3   [CKL]   32.90   87.25   Centreville,AL
4   [DHN]   31.32   85.45   Dothan,AL
5   [OZR]   31.28   85.72   Fort
6   [GAD]   33.97   86.09   Gadsden,AL

各字段数据类型:

ID           object
LAT         float64
LON         float64
Location     object
dtype: object

我的目标是把每个城市的纬度、经度代入自定义的City复数计算公式,输出完整复数列表用于后续可视化,复数相关定义代码如下:

Point = complex
City  = Point

def X(point): 
    "点的x坐标"
    return point.real

def Y(point): 
    "点的y坐标"
    return point.imag

# 待填充的公式模板
formula = City(69 * float( **XX LAT XX** ), -49  * float( **XX LON XX** ))

print(formula)

目前我只会写单行计算的代码,无法批量处理所有行生成列表,单行计算示例:

formula_example = City(69 * float(df.loc[1, 'LAT']), -49  * float(df.loc[1, 'LON']))
formula_example

单行运行输出:

(2254.23-4186.5599999999995j)
实现方法

你的数据里LAT和LON列已经是float64类型,不需要额外套float()做类型转换,两种常用实现方式如下:

  • 向量化运算(推荐,数据量大时运行效率远高于逐行循环)
# 直接批量生成复数,可存入DataFrame关联城市属性
df['city_complex'] = 69 * df['LAT'] - 49 * df['LON'] * 1j
# 导出为纯Python列表供后续使用
city_complex_list = df['city_complex'].tolist()
  • 逐行遍历(逻辑和你写的单行计算完全一致,新手更容易理解)
city_complex_list = []
for _, row in df.iterrows():
    current_city = City(69 * row['LAT'], -49 * row['LON'])
    city_complex_list.append(current_city)

两种方式生成的列表完全一致,你之前计算的索引1位置的Auburn城市复数结果,和列表对应位置的输出匹配,可以直接用于后续可视化开发。


内容的提问来源于stack exchange,提问作者John Denn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:06:09