Расщепление колонн в пандах - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть pandas dataframe со следующей структурой:

df1 = pd.DataFrame({'id': 1, 'coords':{0: [(-43.21,-22.15),(-43.22,-22.22)]}})

Как я могу отделить значения от столбца координат так, чтобы первый элемент в каждом списке образовывал столбец с именем широта, а второй - с именем столбцадолгота, как показано ниже?

id|  latitude     |longitude
1 |(-43.21,-43.22)|(-22.15, -22.22)

Ответы [ 4 ]

1 голос
/ 23 сентября 2019

Использование 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)
0 голосов
/ 24 сентября 2019

взять кортеж для lat:

lat = [(x[0][0],x[1][0]) for x in df1['coords'].values]
df1['latitude'] = lat

так же, как для longt:

longt = [(x[0][1],x[1][1]) for x in df1['coords'].values]
df1['longtitude'] = longt

столбцы координат отбрасывания:

df1.drop(columns='coords')

надеюсь, это поможет!

0 голосов
/ 23 сентября 2019

Просто с помощью .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)
0 голосов
/ 23 сентября 2019

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...