Объединить несколько строк столбцов в один столбец - PullRequest
1 голос
/ 20 сентября 2019

У меня есть следующий датафрейм с именем и фамилией.Я хочу создать столбец fullname.

df1 = pd.DataFrame({'firstname':['jack','john','donald'],
                  'lastname':[pd.np.nan,'obrien','trump']})

print(df1)

  firstname lastname
0      jack      NaN
1      john   obrien
2    donald    trump

Это работает, если нет значений NaN:

df1['fullname'] = df1['firstname']+df1['lastname']

Однако, поскольку в моем фрейме данных есть NaNs, я решил сначала привести к string.Но это вызывает проблему в столбце fullname:

df1['fullname'] = str(df1['firstname'])+str(df1['lastname'])


  firstname lastname                                           fullname
0      jack      NaN  0      jack\n1      john\n2    donald\nName: f...
1      john   obrien  0      jack\n1      john\n2    donald\nName: f...
2    donald    trump  0      jack\n1      john\n2    donald\nName: f...

Я могу написать некоторую функцию, которая проверяет nans и вставляет данные в новый фрейм, но прежде чем я это сделаю - есть ли другой быстрый методобъединить эти строки в один столбец?

Ответы [ 5 ]

3 голосов
/ 20 сентября 2019

Вам нужно обработать NaN с использованием .fillna() Здесь вы можете заполнить его ''.

df1['fullname'] = df1['firstname'] + ' ' +df1['lastname'].fillna('')

Вывод:

 firstname  lastname    fullname
0   jack    NaN         jack
1   john    obrien      john obrien
2   donald  trump       donald trumpt
1 голос
/ 20 сентября 2019

Вы также можете использовать .add и указать fill_value

df1.firstname.add(" ").add(df1.lastname, fill_value="")

PS: слишком большое число добавлений или + не рекомендуется для строк, но для одного или двух столбцову тебя должно быть все в порядке

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

Что я буду делать (для случая, когда нужно объединить более двух столбцов)

df1.stack().groupby(level=0).agg(' '.join)
Out[57]: 
0            jack
1     john obrien
2    donald trump
dtype: object
0 голосов
/ 20 сентября 2019

Существует также Series.str.cat, который может обрабатывать NaN и включает разделитель.

df1["fullname"] = df1["firstname"].str.cat(df1["lastname"], sep=" ", na_rep="")

   firstname lastname      fullname
 0      jack      NaN         jack
 1      john   obrien   john obrien
 2    donald    trump  donald trump
0 голосов
/ 20 сентября 2019

df1['fullname'] = df1['firstname']+df1['lastname'].fillna('')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...