Разделить столбец (разделитель) в Pandas DataFrame; длина столбцов равна ошибке ключа

1

У меня есть DataFrame, у которого есть столбец под названием "Financial Week Name", у которого есть что-то вроде "недели 17" на каждую финансовую неделю.

  Financial Week Name   Day Part
    week 0          Breakfast
    week 0          Lunch
    week 0          Dinner
    week 1          Breakfast
    week 1          Lunch

Проблема в том, что я не могу сортировать их от самых маленьких до самых больших. Моя мысль заключалась в том, чтобы взломать что-либо после пробела после слова "неделя"; в основном разграничение. Я добавил пустой блок (с именем "weekNo") в фреймворк данных, а затем попытался использовать метод.str.split для ввода чисел в только что созданный столбец:

 df[['Financial Week Name', 'weekNo']] = df['Financial Week Name'].str.split(' ', expand=True) 

но получил следующую ошибку:

" ValueError: Columns must be same length as key"

Я не уверен, как получить числовое значение с конца строки "неделя х", чтобы перейти к отдельному столбцу, и попытались использовать.iloc, чтобы безуспешно срезать значения. Я довольно тупой; Любая помощь будет принята с благодарностью.

  • 0
    Я хотел бы отсортировать в хронологическом порядке, по номеру финансовой недели.
Теги:
pandas

2 ответа

0

Исправляя последний комментарий, у вас может быть дополнительное место где-то в столбце Financial Week Name. Например

  Financial Week Name   Day Part
    week 0          Breakfast
    week 0          Lunch
    week 0          Dinner
    week 1          Breakfast
    week  1         Lunch

Эта последняя запись приведет к тому, что функция split будет создавать строку с тремя элементами, и вы передадите ее на 2 столбца, следовательно

" ValueError: Columns must be same length as key"

Я предлагаю вам просто извлечь номера из этой колонки

df['weekNo'] = df['Financial Week Name'].str.extract('(\d+)').astype(int)
0

Вам нужно использовать аргумент expand=True. Это гарантирует, что разделенные столбцы будут расширены в dataframe.

Кроме того, для заказа вам нужно преобразовать week_no в integer dtype, иначе 10 появится до 2.

df = pd.DataFrame({'week': ['week 0', 'week 1'],
                   'part': ['Breakfast', 'Lunch']})

# assign to expanded split
df[['week', 'week_no']] = df['week'].str.split(expand=True)

# convert to integer
df['week_no'] = df['week_no'].astype(int)

# sort by week number
df = df.sort_values('week_no')

print(df)

        part  week  week_no
0  Breakfast  week        0
1      Lunch  week        1
  • 0
    Я все еще получаю ту же ошибку: «Столбцы должны быть такой же длины, как ключ». Я запустил метод .info () на df, и он показывает 96 записей в каждом столбце (это означает, что количество элементов соответствует)
  • 0
    @ jules325, не могу воспроизвести, извините. Я могу помочь в дальнейшем, если вы можете привести минимальный воспроизводимый пример .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню