将Lat Lon坐标添加到单独的列(python / dataframe)

时间:2016-09-08 17:08:18

标签: python pandas dataframe

我确定这是一件很简单的事情,但我是Python的新手,无法解决这个问题!

我有一个数据框,其中一列包含坐标,我想删除括号并将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)

任何帮助都将受到赞赏,因为我不知道如何使这项工作! :)

修改 我一直在收到错误 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

3 个答案:

答案 0 :(得分:4)

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 :(得分: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

答案 2 :(得分:0)

回答问题: 输入是一列,其元组类似于我的代码中的b列。 需要的输出是两列,类似于我的答案中的b1和b2列。

创建了一个DataFrame:     在[2]中:df = pd.DataFrame({'a':[1,2],'b':[(1,2),(3,4)]}))

In [3]: df                                                                                                                                                                      
Out[3]: 
   a       b
0  1  (1, 2)
1  2  (3, 4)

将列转换为列表:

In [4]: df['b'].tolist()                                                                                                                                                        
Out[4]: [(1, 2), (3, 4)]

使用列表创建所需的数据框[需要输出]:

In [5]: pd.DataFrame(df['b'].tolist(), index=df.index)                                                                                                                                          
Out[5]: 
   0  1
0  1  2
1  3  4

我们还可以尝试使用以下代码在同一数据帧中获取输出:     在[6]中:df [[''b1','b2']] = pd.DataFrame(df ['b']。tolist(),index = df.index)

In [7]: df                                                                                                                                                                      
Out[7]: 
   a       b  b1  b2
0  1  (1, 2)   1   2
1  2  (3, 4)   3   4