#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. Спасибо вам за ваши ответы