изменение данных столбца с "lastname, firstname" на "firstname lastname" в python pandas dataframe - PullRequest
1 голос
/ 17 июня 2020

У меня есть python pandas фрейм данных, обслуживаемый поддержкой преобразования источника данных power bi для выполнения python скрипта, где один из столбцов состоит из lastname, firstname, а мне нужно, чтобы он состоял из firstname lastname .

Я пробовал следующий подход разделения, обратного соединения, который работает с автономным строковым аргументом, но генерирует AttributeError: 'Series' object has no attribute 'split', когда я пробую его на данных столбца в pandas фрейме данных.

name = 'LastName, FirstName'
' '.join(reversed(name.split(', ')))
# output = 'FirstName LastName'

import pandas as pd
df = pd.DataFrame({'full_name': ['doe, john', 'smith, kate', 'jones, susan', 'edwards, jack' ],
                   'num_legs': [2, 4, 8, 0],
                   'num_wings': [2, 0, 0, 0],
                   'num_specimen_seen': [10, 2, 1, 8]},
                   index=['falcon', 'dog', 'spider', 'fish'])
df
df['full_name'] = ' '.join(reversed(df['full_name'].split(', ')))
# output = AttributeError: 'Series' object has no attribute 'split'

Поиск ТАК, я вижу хиты для выполнения этого чего-то подобного в столбце Excel и в R списке , но ничего, что я еще не смог найти для столбца в python pandas фрейм данных.

Ответы [ 3 ]

2 голосов
/ 17 июня 2020

Здесь может помочь комбинация строковых методов pandas ': для скорости я бы предложил запустить понимание списка внутри самого python. Строковые методы в Pandas предоставляются в первую очередь для удобства / простоты.

df['full_name'] = df.full_name.str.split(",").str[::-1].str.join(",")


          full_name     num_legs    num_wings   num_specimen_seen
falcon     john,doe         2           2             10
dog        kate,smith       4           0             2
spider     susan,jones      8           0             1
fish       jack,edwards     0           0             8
2 голосов
/ 17 июня 2020

В вашем случае мы можем сделать split с map PS: ::-1 здесь обратный порядок

df.full_name=df.full_name.str.split(', ').map(lambda x : ' '.join(x[::-1]))
df.full_name
falcon        john doe
dog         kate smith
spider     susan jones
fish      jack edwards
Name: full_name, dtype: object
0 голосов
/ 17 июня 2020

Ошибка вызвана тем, что переменная имеет тип type(df['full_name']) <class 'pandas.core.series.Series'>. Преобразуйте его в список и затем действуйте:

import pandas as pd
df = pd.DataFrame({'full_name': ['doe, john', 'smith, kate', 'jones, susan', 'edwards, jack' ],
        'num_legs': [2, 4, 8, 0],
        'num_wings': [2, 0, 0, 0],
        'num_specimen_seen': [10, 2, 1, 8]},
        index=['falcon', 'dog', 'spider', 'fish'])

print(map(lambda x: x.split(',')[::-1], df['full_name'].tolist()))
...