Панды: Как заполнить значение nan для столбца частью значения в других столбцах

#python #python-3.x #pandas #data-analysis #exploratory-data-analysis

Вопрос:

Я хочу, чтобы значение в столбце город было заполнено первым словом столбца место проведения

введите описание изображения здесь

Я пробовал использовать df.city.fillna(value=df.venue.str.split()[0]) , но для заполнения требуются значения первой строки, заранее спасибо

Ответ №1:

От вашего DataFrame :

 >>> import pandas as pd
>>> from io import StringIO

>>> df = pd.read_csv(StringIO("""
id,city,venue
2343242,NaN,Sharjah Cricket Stadium
4354534,NaN,Dubai Internationnl Cricket Stadium
4564564,NaN,Dubai Internationnl Cricket Stadium
3454355,NaN,Sharjah Cricket Stadium
5676575,NaN,Sharjah Cricket Stadium"""))
>>> df
    id          city    venue
0   2343242     NaN     Sharjah Cricket Stadium
1   4354534     NaN     Dubai Internationnl Cricket Stadium
2   4564564     NaN     Dubai Internationnl Cricket Stadium
3   3454355     NaN     Sharjah Cricket Stadium
4   5676575     NaN     Sharjah Cricket Stadium
 

После split() того, как вы использовали, мы можем использовать map , чтобы назначить первый элемент списка NaN значениям в City столбце, как и ожидалось :

 >>> df['city'] = df['city'].fillna(value=df['venue'].str.split().map(lambda x: x[0]))
>>> df
    id          city        venue
0   2343242     Sharjah     Sharjah Cricket Stadium
1   4354534     Dubai       Dubai Internationnl Cricket Stadium
2   4564564     Dubai       Dubai Internationnl Cricket Stadium
3   3454355     Sharjah     Sharjah Cricket Stadium
4   5676575     Sharjah     Sharjah Cricket Stadium
 

Редактировать:

Еще короче, благодаря @HenryEcker :

 >>> df['city'] = df['city'].fillna(value=df['venue'].str.split().str[0])
>>> df
    id          city        venue
0   2343242     Sharjah     Sharjah Cricket Stadium
1   4354534     Dubai       Dubai Internationnl Cricket Stadium
2   4564564     Dubai       Dubai Internationnl Cricket Stadium
3   3454355     Sharjah     Sharjah Cricket Stadium
4   5676575     Sharjah     Sharjah Cricket Stadium
 

Комментарии:

1. Может df['city'] = df['city'].fillna(value=df['venue'].str.split().str[0]) быть, вместо map и lambda

Ответ №2:

Вы можете использовать str.split параметр with expand=True для расширения разбиения слов на разные столбцы и получения первого столбца 0 для ввода в .fillna функцию для столбца city следующим образом:

 df['city'] = df['city'].fillna(df['venue'].str.split(' ', expand=True)[0])
 

или разделите на список по умолчанию expand=False и используйте str[0] для получения первого элемента в списке:

 df['city'] = df['city'].fillna(df['venue'].str.split().str[0])
 

Таким образом, нам не нужно использовать невекторизованную лямбду или применять функции.

Ответ №3:

вы можете попробовать что-то вроде этого:

 df['city'] = df.venue.apply(lambda x: x.split()[0])
 

Комментарии:

1. На самом деле он заменяет все остальные значения , я просто хочу, чтобы он заменял значения nan. Спасибо вам за ваши ответы