#python #string
#python #строка
Вопрос:
У меня есть список с комбинациями firstname-lastname, например:
['henry-dupuis', 'arthur-keynes', ...]
Я хотел бы иметь возможность разделить строку на две части и создать фрейм данных:
df =
fullname firstname lastname
henry-dupuis henry dupuis
arthur-keynes arthur keynes
...
Как я могу это сделать?
Ответ №1:
names = ['henry-dupuis', 'arthur-keynes'...]
splitted_names = [[elem] elem.split('-')[:2] for elem in names]
df = pd.DataFrame(splitted_names, columns=["full-name", "fist-name", "last-name"])
Комментарии:
1. Как насчет имен с переносом?
2. @Sayse это невозможно сделать для некоторых имен, написанных через дефис. например. daniel-max-smith может быть daniel-max как имя или max-smith как фамилия… Добавлена часть фрейма данных
Ответ №2:
Код:
df = pd.DataFrame(names, columns=['FullName'])
df['FirstName'] = df['FullName'].apply(lambda x: x.split('-')[0])
df['LastName'] = df['FullName'].apply(lambda x: x.split('-')[1])
Результаты:
FullName FirstName LastName
0 henry-dupuis henry dupuis
1 arthur-keynes arthur keynes
Ответ №3:
Если в списке полных имен у вас есть ‘-‘ в качестве разделителя.
Затем вы можете сначала запустить цикл над ним, а затем разделить элементы цикла и создать из него фрейм данных.
for element in fullnames:
splitNames = element.split('-')
firstName.append(splitNames[0])
lastName.append(splitNames[1])
pd.DataFrame(firstName, columns=['firstName'])
pd.DataFrame(lastName, columns=['lastName'])
Это также создаст фрейм данных pandas для заданных имени и фамилии.
Ответ №4:
Вы должны использовать str
функциональные возможности pandas
, которые являются векторизованными:
import pandas as pd
df = pd.DataFrame(["henry-dupuis", "arthur-keynes", "james-arthur-conway"], columns=["fullname"])
df[["firstname", "lastname"]] = df.fullname.str.split("-", 1).apply(pd.Series)
print(df)
# fullname firstname lastname
# 0 henry-dupuis henry dupuis
# 1 arthur-keynes arthur keynes
# 2 james-arthur-conway james arthur-conway
Это гарантирует, что имя будет разделено только вначале -
, на случай, если в имени есть еще. Это может быть неправильно, но, по крайней мере, будет работать и быть последовательным. Не существует способа, которым любой код получит это правильно везде. Есть люди по имени Джеймс-Артур Конвей и люди по имени Джеймс Артур-Конвей. Вы должны прочитать ложные представления программистов об именах.
В любом случае, если ваши данные действительно соответствуют вашим заданным требованиям, этот код будет работать и будет быстрее, чем любой цикл, выполняемый в Python.