2016-08-21 19 views
2

以下のコードでは、データフレームdf5にデータが入力されません。私は値をdataframeの列に代入するだけで、あらかじめ列を指定しています。データフレームを印刷すると、空のデータフレームが返されます。私が何かを欠いているかどうかは分かりません。データフレーム列に値を割り当てる

ご協力いただければ幸いです。

import math  
import pandas as pd 

columns = ['ClosestLat','ClosestLong'] 

df5 = pd.DataFrame(columns=columns) 

def distance(pt1, pt2): 
    return math.sqrt((pt1[0] - pt2[0])**2 + (pt1[1] - pt2[1])**2) 

for pt1 in df1: 
    closestPoints = [pt1, df2[0]] 
    for pt2 in df2: 
    if distance(pt1, pt2) < distance(closestPoints[0], closestPoints[1]): 
     closestPoints = [pt1, pt2] 
     df5['ClosestLat'] = closestPoints[1][0] 
    df5['ClosestLat'] = closestPoints[1][0] 
    df5['ClosestLong'] = closestPoints[1][1] 
    print ("Point: " + str(closestPoints[0]) + " is closest to " + str(closestPoints[1])) 
+0

df1とdf2を定義してください。 – bpachev

答えて

1

あなたのコードの表情からは、緯度と経度のリストをdf5を投入しようとしています。しかし、あなたはいくつかの間違いをしています。

  1. パンダのデータフレームの列は、シリーズであり、何らかの種類の順次データを保持します。したがって、df5['ClosestLat'] = closestPoints[1][0]は、列全体をに1つの数値に割り当てようとすると、空の列になります。
  2. データフレームで列に実数を代入しようとしても、各ループで列を上書きするため、データが失われます。

解決策:ラットとロングのリストを作成し、データフレームに挿入します。

import math  
import pandas as pd 

columns = ['ClosestLat','ClosestLong'] 

df5 = pd.DataFrame(columns=columns) 

def distance(pt1, pt2): 
    return math.sqrt((pt1[0] - pt2[0])**2 + (pt1[1] - pt2[1])**2) 

lats, lngs = [], [] 
for pt1 in df1: 
    closestPoints = [pt1, df2[0]] 
    for pt2 in df2: 
    if distance(pt1, pt2) < distance(closestPoints[0], closestPoints[1]): 
     closestPoints = [pt1, pt2] 
    lats.append(closestPoints[1][0]) 
    lngs.append(closestPoints[1][1]) 

df['ClosestLat'] = pd.Series(lats) 
df['ClosestLong'] = pd.Series(lngs) 
+0

ありがとうございます。それは完全に動作します。 – user3447653

関連する問題