我确定这是一件很简单的事情,但我是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
答案 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