【发布时间】:2017-08-31 07:18:02
【问题描述】:
我目前正在尝试计算具有多条线的地震导航文件中的炮点之间的距离。我目前的代码如下:
def Delimiter(Filename, a, b, c, d, e, f):
data = pd.read_fwf(Filename, names=[a, b ,c ,d ,e ,f ], header=None)
data['lineshift'] = data['line'].shift(-1)
data['bool'] = data['lineshift'] == data['line']
for _, row in data.iterrows():
data['SPDIF'] = np.abs(data['sp'].astype(float) - data['sp'].astype(float).shift(-1))
data['XDIFF'] = data['X'] - data['X'].shift(-1)
data['YDIFF'] = data['Y'] - data['Y'].shift(-1)
data['XYDIFF'] = np.sqrt(data['XDIFF']**2 + data['YDIFF']**2)
data['SPDIST'] = data['XYDIFF']/data['SPDIF']
if row['line'] != row['lineshift']:
data['SPDIF'] = data['SPDIF'].replace({0: np.nan})
data['XDIFF'] = data['XDIFF'].replace({0: np.nan})
data['YDIFF'] = data['YDIFF'].replace({0: np.nan})
data['XYDIFF'] = data['XYDIFF'].replace({0: np.nan})
data['SPDIST'] = data['SPDIST'].replace({0: np.nan})
data.info()
print data
Delimiter(os.path.splitext(x)[0] + ".csv", "line", "sp", "Xcoord", "Ycoord", "X", "Y")
此代码将包含射击点数据的 CSV 加载到 pandas 数据框中。但是,我想检查代码是否没有计算不同线的 2 个射击点之间的距离。如果“line”列与同一行的“lineshift”列不同,我希望它显示 N/A。如果相同,则应为该特定行计算 5 个新列。
但是当我运行这段代码时,它给出了以下错误:
ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
如果可能,我需要添加什么来使这段代码运行并检查每一行?
CSV 文件中的数据示例:
line sp ycoord xcoord x y lineshift
8 761298 1080 521754.1N 65132.6E 255355 479838 761298 True
9 761298 1090 5218 2.5N 65154.3E 255760 480107 761298 True
10 761298 1100 521812.1N 65216.0E 256165 480410 761298 True
11 761298 1110 521820.7N 65236.8E 256554 480685 771022 False
12 771022 1020 521835.8N 65238.3E 256573 481153 771022 True
13 771022 1030 521841.0N 65245.2E 256700 481315 771022 True
14 771022 1040 521845.8N 65252.2E 256830 481466 771022 True
【问题讨论】:
标签: python python-2.7 pandas if-statement dataframe