Заполнение пустых значений в столбце фрейма данных, имеющих такие значения, как 40-45', nan,' 40-45', nan,
У меня есть фрейм данных, в одном конкретном столбце которого есть значения температуры, как показано ниже.
'35-40',
'35-40',
'40-45',
'40-45',
'45-50',
'40-45',
'40-45',
nan,
'40-45',
nan,
'40-45',
'40-45',
'35-40',
Я пытаюсь создать новый столбец, разделяющий минимальную и максимальную температуры. В строках, заполненных "nan", я хочу, чтобы значения после "," также были "nan". как мне это сделать? Я пробовал приведенный ниже код, но он не работал.
train["Maximum Temperature"] = train["Cellar Temperature"].apply(lambda x: np.nan if train["Cellar Temperature"][0]==np.nan else (str(x).split("-")[1]))
Всякий раз, когда я запускаю приведенный выше код, я получаю следующую ошибку
IndexError: list index out of range
Пожалуйста, помогите мне.
3 ответа
Пытаться:
train[["Minimum Temperature", "Maximum Temperature"]]=train["Cellar Temperature"].str.split("-", expand=True, n=1)
str.split()
разделит строку указанным разделителем - -
в этом случае. потомexpand
будет взорвать разделенный массив, поэтому каждый элемент перейдет в отдельный столбец. потомn=1
ограничит максимальное количество разделений до 1 (иначе вы получите ошибку, если у вас будет более 1 дефиса в любой ячейке).
Вы можете использовать extract
чтобы получить оба:
df['temp'].str.extract('(?P<minimum>\d+)-(?P<maximum>\d+)')
Выход:
minimum maximum
0 35 40
1 35 40
2 40 45
3 40 45
4 45 50
5 40 45
6 40 45
7 NaN NaN
8 40 45
9 NaN NaN
10 40 45
11 40 45
12 35 40
Чтобы напрямую исправить свой код, попробуйте
train["Maximum Temperature"] = train["Cellar Temperature"].apply(lambda x: np.nan if pd.isnull(x) else x.split("-")[1])