Как разрезать строку надвое для создания фрейма данных?

#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.