Как разделить столбец «местоположение» в данном фрейме данных? - PullRequest
0 голосов
/ 29 сентября 2018

Я работаю над набором данных, в котором столбцы названы заголовками.Значение как указано.

df = pd.DataFrame(data={"location":["düsseldorf, nordrhein-westfalen, germany",
                                    "durbanville , cape town, cape town , south africa"]})

Я хочу разделить этот столбец на ['city', 'state', 'country'].Обратите внимание, что во второй строке есть дубликаты.

Я пробовал ниже, но это не относится к дубликатам:

location = df.location.str.split(', ', n=2, expand=True)

location.columns = ['city', 'state', 'country']

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Вы можете ограничить себя только с помощью pandas для решения этой проблемы:

import pandas as pd

pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None) 

data_all=(['düsseldorf', 'nordrhein-westfalen', 'germany', 'durbanville', 'cape town', 'south africa'])
dfe = [[], [], []]

i = 0
j = 1
k = 2

while i < len(data_all):
  dfe[0].append(data_all[i])
  i += 3
while j < len(data_all):
  dfe[1].append(data_all[j])
  j += 3
while k < len(data_all):
  dfe[2].append(data_all[k])
  k += 3

d = {'city': dfe[0], 'state': dfe[1], 'country': dfe[2]}
df = pd.DataFrame(data=d)
print(df)

Результат:

          city                state       country
0   düsseldorf  nordrhein-westfalen       germany
1  durbanville            cape town  south africa

Но на самом деле я не понимаю, почему вы хотите использовать дубликаты,если у вас есть только 3 столбца: город, штат и страна.

0 голосов
/ 29 сентября 2018

Вы можете использовать рецепт unique_everseen, доступный в itertools документах , который также доступен в сторонних библиотеках, таких как toolz.unique.

Логика может быть включена в понимание списка, которое повторяется df['location'].Это, вероятно, будет более эффективным, чем методы на основе строк Pandas, которые не предлагают векторизованную функциональность.

from toolz import unique

res = pd.DataFrame([list(unique(map(str.strip, i.split(',')))) for i in df['location']])

res.columns = ['city', 'state', 'country']

print(res)

          city                state       country
0   düsseldorf  nordrhein-westfalen       germany
1  durbanville            cape town  south africa
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...