在熊猫中拆分列

时间:2019-09-23 15:10:58

标签: python pandas

我的熊猫数据框具有以下结构:

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)

4 个答案:

答案 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')

希望这会有所帮助!