2016-09-08 16 views
-1

これは簡単なことだと確信していますが、私はPythonを初めて使いこなしています。別の列にLat Lon座標を追加する(python/dataframe)

私は座標を含む1つの列を持つデータフレームを持っており、角括弧を削除し、Lat/Lon値を別々の列に追加したいと考えています。

現在のデータフレーム:

gridReference 
(56.37769816725615, -4.325049868061924) 
(56.37769816725615, -4.325049868061924) 
(51.749167440074324, -4.963575226888083) 

は、データフレームたかった:あなたの助け

Latitude    Longitude 
56.37769816725615  -4.325049868061924 
56.37769816725615  -4.325049868061924 
51.749167440074324 -4.963575226888083 

感謝を

編集:私は試してみました :

df['lat'], df['lon'] = df.gridReference.str.strip(')').str.strip('(').str.split(', ').values.tolist()

が、私はエラーを取得:

AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas

私はその後、追加してみました:

df['gridReference'] = df['gridReference'].astype('str')

をし、エラーました:すべてのヘルプは次のようになり

ValueError: too many values to unpack (expected 2)

を私はどのようにトンoこの作品を作る! :)

EDIT: が、私はエラー AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas

を得続けるdf.dtypesのための出力は、次のとおりです。

<class 'pandas.core.frame.DataFrame'> Int64Index: 22899 entries, 0 to 22898 Data columns (total 1 columns): LatLon 22899 non-null object dtypes: object(1)

df.infoのための出力は()です:

gridReference object dtype: object

+1

データのサンプルを試してみてください。 –

+0

私はいくつかの情報を追加しました。もしあなたが何らかの方法で助けてくれればそれは高く評価されるでしょう! – hsquared

答えて

0
>>> df = pd.DataFrame({'latlong': ['(12, 32)', '(43, 54)']}) 
>>> df 
    latlong 
0 (12, 32) 
1 (43, 54) 

>>> split_data = df.latlong.str.strip(')').str.strip('(').str.split(', ') 
>>> df['lat'] = split_data.apply(lambda x: x[0]) 
>>> df['long'] = split_data.apply(lambda x: x[1]) 
    latlong lat long 
0 (12, 32) 12 43 
1 (43, 54) 32 54 
+0

エラー:「AttributeError:pandasでnp.object_dtypeを使用する文字列値を持つ.strアクセサのみを使用できます」 - それを動作させるには前もって何をする必要がありますか? - ありがとう。 – hsquared

+0

元のデータフレームの形式は何ですか? –

+0

'df.dtypes'を実行しています: ' gridReferenceオブジェクト dtype:オブジェクト ' – hsquared

2
df['gridReference'].str.strip('()')        \ 
        .str.split(', ', expand=True)     \ 
        .rename(columns={0:'Latitude', 1:'Longitude'}) 

      Latitude   Longitude 
0 56.37769816725615 -4.325049868061924 
1 56.37769816725615 -4.325049868061924 
2 51.749167440074324 -4.963575226888083 
+1

ニース - しかし、私はあなたが2番目の列に空白を追加し、 float'(文字列が浮動小数点のように見えるのでフロートが良いと思います) – jezrael

+0

あなたの提案をありがとう。私は 'astype(浮動小数点型)'は小数点全体を占めていないと考えています(6桁までの精度を与えますが、最初に設定することで変更できます)。私は彼がここから前進したいと思う方法を考えるためにそれをOPに残しました。 –

+0

問題ありません。 – jezrael