Pandas - 在计算中跳过 NULL 值
Pandas - skip NULL value in calculation
我需要将字段添加到我的 DataFrame 中,计算出位置 A 和位置 B 之间的距离。我有这段代码,它适用于坐标不为空的字段:
df['Distance_AB'] = df.apply(lambda x: great_circle((x['latitude_A'],x['longitude_A']), (x['latitude_B'], x['longitude_B'])).meters, axis=1).round()
但是当它遇到空字段时会抛出错误:
ValueError: ('Point coordinates must be finite. (nan, nan, 0.0) has
been passed as coordinates.', u'occurred at index 2881')
如何保证大圆距离公式不会得到NULL值(没有坐标时会跳过距离计算)?我知道 pd.notnull()
函数,但它 returns True
或 False
.
我假设您的函数 great_circle
不可矢量化或矢量化超出您的问题范围。由于 pd.DataFrame.apply
已经是一个 Python 级循环,您可以使用带有 try
/ except
的显式函数,而不会产生显着的额外开销:
def calculator(row):
lat_A, long_A = row['latitude_A'], row['longitude_A']
lat_B, long_B = row['latitude_B'], row['longitude_B']
try:
return great_circle((lat_A, long_A), (lat_B, long_B)).meters
except ValueError:
return np.nan
df['Distance_AB'] = df.apply(calculator, axis=1).round()
我需要将字段添加到我的 DataFrame 中,计算出位置 A 和位置 B 之间的距离。我有这段代码,它适用于坐标不为空的字段:
df['Distance_AB'] = df.apply(lambda x: great_circle((x['latitude_A'],x['longitude_A']), (x['latitude_B'], x['longitude_B'])).meters, axis=1).round()
但是当它遇到空字段时会抛出错误:
ValueError: ('Point coordinates must be finite. (nan, nan, 0.0) has been passed as coordinates.', u'occurred at index 2881')
如何保证大圆距离公式不会得到NULL值(没有坐标时会跳过距离计算)?我知道 pd.notnull()
函数,但它 returns True
或 False
.
我假设您的函数 great_circle
不可矢量化或矢量化超出您的问题范围。由于 pd.DataFrame.apply
已经是一个 Python 级循环,您可以使用带有 try
/ except
的显式函数,而不会产生显着的额外开销:
def calculator(row):
lat_A, long_A = row['latitude_A'], row['longitude_A']
lat_B, long_B = row['latitude_B'], row['longitude_B']
try:
return great_circle((lat_A, long_A), (lat_B, long_B)).meters
except ValueError:
return np.nan
df['Distance_AB'] = df.apply(calculator, axis=1).round()