【问题标题】:Getting different output for DataFrame & normal implementation of same code为 DataFrame 获得不同的输出和相同代码的正常实现
【发布时间】:2015-06-22 21:37:36
【问题描述】:

我正在尝试计算 DataFrame 两点之间的 vincety 距离。如果我直接输入字符串,我会得到以下输出:

loca1 = [12.9404578177, 77.5548244743]
loca2 = [12.9404578177, 77.5548244743]
print vincenty(loca1,loca2).meters 

>>>0.0

在使用 Dataframe 实现相同的事情时,我得到以下输出:

from geopy.distance import vincenty 
for i in range(len(cleandata)):
    if i < 303708:
        location2 = cleandata.iloc[i]['location']
        location1 = cleandata.iloc[i+1]['location']
        cleandata.iloc[i]['distance'] = vincenty(location1, location2).meters
    else:
        print i

print cleandata.loc[1]['distance']
>>>*13921

cleandata['location'] 的坐标字符串与我在第一个代码中输入的坐标字符串完全相同。 我在这两种情况下都检查了进入 vincety 函数的变量是列表。

如何解释和解决这种奇怪的行为?

【问题讨论】:

  • 是因为您打印的是loc 而不是iloc
  • 不,iloc是整数索引的时候用这个case 'i',而loc是你想用标签索引的时候用在这里'distance'

标签: python pandas dataframe geopy


【解决方案1】:

嗯,我得到了答案,值 13921 来自以前的代码,没有被覆盖,以下更改使覆盖成为可能

cleandata.iloc[i,'distance'] = vincenty(location1, location2).meters

而不是cleandata.iloc[i]['distance']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多