【问题标题】:Python Data Frame: Change Negative Polar Angles to PositivePython Dataframe:将负极角更改为正
【发布时间】:2018-05-21 19:51:23
【问题描述】:

这不起作用:

df[df['angle'] < 0]] += 360

我该如何解决这个问题?我需要将一个已经存在的带有负角和正角的 pandas 数据框更新为正极坐标角(0 到 360 度)。

有:

[-135, -90, -45, 180, 135, 90, 45, 0, etc... ] # polar 'angles' in degrees (with negatives)

想要:

[315, 270, 225, 180, 135, 90, 45, 0, etc... ] # polar 'angles' in degrees (positive only)

// 编辑(用于响应):///////////////////////////////// ///////////////////////////////////////// ////////////////////////////

df[df['angle'] &lt; 0]] += 360 这一行给出了类型错误:
“TypeError: 无法操作 360 块值必须是 str,而不是 float。”

数据框'angle'的信息是:
"名称:角度,数据类型:in64,

我使用的原始“蛮力”解决方案是:

for i in range(len(df['angle'])):
    if df['angle'][i] < 0:
        df['angle'][i] += 360

这可行,但速度很慢,并且会发出警告,然后告诉我查找有关数据帧索引的文档。

【问题讨论】:

  • 解释第一个和第三个结果?
  • 这不起作用? df[df.angle &lt;0] += 360.
  • 它给出了一个类型错误。请参阅原始帖子中的编辑。
  • 尝试将您的列转换为 int df['angle'] = df['angle'].astype(int)

标签: python-3.x pandas polar-coordinates


【解决方案1】:

使用

df['angle'] %= 360 

无论符号如何,将所有角度转换为[0-360) 范围。这将适用于负度数或绝对值超过 360 的角度

例子:

-270 % 360 == 90
-675 % 360 == 45
675 % 360 == 315

如果您只想处理负度数(即允许 450 而不是将其转换为 90):

df.iloc[df.angle < 360, 'angle'] %= 360

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 2016-08-23
    • 1970-01-01
    • 2019-04-21
    相关资源
    最近更新 更多