我的熊猫数据框具有以下结构:
df1 = pd.DataFrame({'id': 1, 'coords':{0: [(-43.21,-22.15),(-43.22,-22.22)]}})
如何将值与coords列分开,以便每个列表中的第一项形成称为纬度的列,而第二个列称为经度的列,如下所示?
id| latitude |longitude
1 |(-43.21,-43.22)|(-22.15, -22.22)
答案 0 :(得分:1)
将join
与列一起爆炸
df1=df1.join(pd.DataFrame(df1.coords.tolist(),index=df1.index,columns=['latitude','longitude']))
Out[138]:
id coords latitude longitude
0 1 [(-43.21, -22.15), (-43.22, -22.22)] (-43.21, -22.15) (-43.22, -22.22)
答案 1 :(得分:0)
apply
是一种简单的方法:
df1['latitude'] = df1.coords.apply(lambda x: x[0])
df1['longitude'] = df1.coords.apply(lambda x: x[1])
输出:
id coords latitude longitude
0 1 [(-43.21, -22.15), (-43.22, -22.22)] (-43.21, -22.15) (-43.22, -22.22)
答案 2 :(得分:0)
只需使用.str
访问器
df1['latitude'] = df1['coords'].str[0]
df1['longitude'] = df1['coords'].str[1]
时差:
df1['latitude'] = df1['coords'].str[0]
# 539 µs ± 15.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
df1['latitude'] = df1.coords.apply(lambda x: x[0])
# 624 µs ± 16.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
答案 3 :(得分:0)
取元组为lat:
lat = [(x[0][0],x[1][0]) for x in df1['coords'].values]
df1['latitude'] = lat
与经度相同:
longt = [(x[0][1],x[1][1]) for x in df1['coords'].values]
df1['longtitude'] = longt
放置坐标列:
df1.drop(columns='coords')
希望这会有所帮助!