Заполнение пустых значений в столбце данных с такими значениями, как 40-45 ', nan, '40 -45', nan, - PullRequest
0 голосов
/ 01 марта 2020

У меня есть фрейм данных, у которого один конкретный столбец имеет значения температуры, как показано ниже

'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 ]

1 голос
/ 01 марта 2020

Вы можете использовать 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
1 голос
/ 01 марта 2020

Попробуйте:

train[["Minimum Temperature", "Maximum Temperature"]]=train["Cellar Temperature"].str.split("-", expand=True, n=1)

str.split() будет разбивать строку по указанному разделителю - - в этом случае. Тогда expand будет взрывать разделенный массив, поэтому каждый элемент будет go в отдельном столбце. Тогда n=1 ограничит максимальное количество сплитов до 1 (в противном случае вы получите ошибку, если в одной ячейке будет более 1 дефиса).

0 голосов
/ 02 марта 2020

Чтобы исправить код напрямую, попробуйте

train["Maximum Temperature"] = train["Cellar Temperature"].apply(lambda x: np.nan if pd.isnull(x) else x.split("-")[1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...