Python OR 给出 The truth value of a Series is ambiguous error 的逻辑

Python OR Logic giving The truth value of a Series is ambiguous error

我正在将 CSV 读取到 Pandas DataFrame,计算行数,然后删除除列名和第一行数据(2 对 X、Y 地理坐标)以外的所有内容。 我从另一个中减去一个得到 Delta_X 和 Delta_Y。 然后我想看看这些值是大于还是小于零 (0),这样我就可以计算出它们位于圆的哪个象限。 根据结果​​我会做一些计算。

import pandas as pd
from pandas import DataFrame
import numpy as np
import csv
data= pd.read_csv('??????/11524_EQ20311_Lines.csv')

df=pd.DataFrame(data, columns=['SOLE','SOLN','EOLE','EOLN'])
numline=len(df.index) #Count the number of lines
df=df.iloc[:1] #Delete all but first line


Delta_X=df['EOLE']-df['SOLE']
Delta_Y=df['EOLN']-df['SOLN']

    Heading_Line=np.degrees(np.arctan((Delta_X)/(Delta_Y))) #Line heading
Length=((abs(df['SOLE']-df['EOLE']))**2+(abs(df['SOLN']-df['EOLN']))**2)**0.5   #Line Length
SOL_Orig_Distance=((2*BinX)**2+(0.5*BinY)**2)**0.5 #Distance diagonally from SOL to BG Origin
SOL_Orig_Angle=np.arctan((2*BinX)/(0.5*BinY))  #Angle from SOL to BG Origin when North up


if Delta_X>0 and Delta_Y>0:
    BGO_X=df['SOLE']-SOL_Orig_Distance*np.sin(SOL_Orig_Angle+Heading_Line)
    BGO_Y=df['SOLN']-SOL_Orig_Distance*np.cos(SOL_Orig_Angle+Heading_Line)
elif Delta_X>0 and Delta_Y<0:
    BGO_X=df['SOLE']-SOL_Orig_Distance*np.sin(SOL_Orig_Angle+(Heading_Line+np.pi))
    BGO_Y=df['SOLN']-SOL_Orig_Distance*np.cos(SOL_Orig_Angle+(Heading_Line+np.pi))
elif Delta_X<0 and Delta_Y<0:
    BGO_X=df['SOLE']-SOL_Orig_Distance*np.sin(SOL_Orig_Angle+(Heading_Line+np.pi))
    BGO_Y=df['SOLN']-SOL_Orig_Distance*np.cos(SOL_Orig_Angle+(Heading_Line+np.pi))
elif Delta_X<0 and Delta_Y>0:
    BGO_X=df['SOLE']-SOL_Orig_Distance*np.sin(SOL_Orig_Angle+(Heading_Line+2*np.pi))
    BGO_Y=df['SOLN']-SOL_Orig_Distance*np.cos(SOL_Orig_Angle+(Heading_Line+2*np.pi))

这是 CSV 的摘录

Line #,Name,SOLE,SOLN,EOLE,EOLN,SOLKP,EOLKP
1,01001-04,433301.816,7182134.323,435354.908,7196488.236,0.000,14.500
2,01005-08,433326.564,7182130.783,435379.656,7196484.696,0.000,14.500
3,01009-12,433351.312,7182127.243,435404.404,7196481.156,0.000,14.500

无论我是否按照某些帖子中的建议使用 'and' 或“&”,我都会不断收到相同的错误。我还尝试通过 df.loc 和 df.iloc 调用 SOLE/EOLE 单元格。 我什至只得到同样的错误:

if Delta_X>0:

错误信息是:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

SOLE 等显示为 Float64。我已经尝试创建一个名为 'Zero' 的变量,将其强制为 Float 然后将逻辑应用于该变量,即 Delta_X>Zero: 但得到相同的错误。

不确定你下面的逻辑是什么,但是你可以使用numpy.where:

df['col'] = np.where((Delta_X>0) & (Delta_Y>0), 'Quadrant1', 'Not Quadrant 1')
print(df)

         SOLE         SOLN        EOLE         EOLN        col
0  433301.816  7182134.323  435354.908  7196488.236  Quadrant1

考虑到我不需要执行此象限计算,因为使用弧度会否定要求。