在Pandas DataFrame中使用单参数调用np.arctan2计算风向的问题
解决方法
1. 纠正np.arctan2的参数调用方式
np.arctan2必须传入两个独立参数,格式为np.arctan2(y, x),其中y对应纵向(南北)分量,x对应横向(东西)分量。你之前的错误包括:
- 传入除法结果作为单参数(这是
np.arctan的用法,而非arctan2) - 错误添加
/符号(这是函数定义中的位置参数标记,调用时无需传入)
2. 调整参数顺序以获取正确风向
你之前直接用np.arctan2(Cew, Cns)结果错误,核心原因是参数顺序颠倒。针对你的风分量定义(Cns为南北风分量、Cew为东西风分量),正确的参数顺序应为np.arctan2(df.Cns, df.Cew),这样才能准确判断角度所在象限。
3. 转换为-180°~180°的角度范围
np.arctan2返回的是弧度值,需用np.rad2deg()转换为角度。该函数本身的返回范围是[-π, π],转成角度后正好是你需要的[-180°, 180°]。
完整代码示例
import numpy as np import pandas as pd # 你的示例数据 df = pd.DataFrame({ 'day': [1, 1, 1], 'hour': [0, 1, 2], 'Cns': [126.002, -42.3775, 64.3313], 'Cew': [-100.812, 18.6631, -121.167] }) # 计算风向(角度范围-180~180) df['wind_direction'] = np.rad2deg(np.arctan2(df['Cns'], df['Cew']))
运行后得到的结果:
| day | hour | Cns | Cew | wind_direction |
|---|---|---|---|---|
| 1 | 0 | 126.0020 | -100.8120 | 128.60 |
| 1 | 1 | -42.3775 | 18.6631 | -66.40 |
| 1 | 2 | 64.3313 | -121.1670 | 152.00 |
内容的提问来源于stack exchange,提问作者user2100039
相关产品推荐
相关产品推荐

