Удалить интервал из списков в кадре данных в Python - PullRequest
0 голосов
/ 19 марта 2020

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

ID        numbers
0      [ 1, 2,3, 4]
1      [ abc, zzy]
2      [ zz12, 22wq, 78]

Как удалить интервал в поле «числа»?

ID        numbers
0      [1,2,3,4]
1      [abc,zzy]
2      [zz12,22wq,78]

Вот что я пробовал:

# remove spacing
df['numbers'] = df['numbers'].replace({' ':''}, regex=True)

Но, похоже, это не работает!

Ответы [ 3 ]

2 голосов
/ 19 марта 2020

Используйте встроенный метод explode.

df = pd.DataFrame({'ID': [0, 1, 2], 'numbers': [[' 1', '2','3',' 4'], [' abc',' zzy'], [' zz12',' 22wq',' 78']]})

temp = df.explode('numbers')
temp['numbers'] = temp.numbers.str.strip()
temp.groupby('ID', as_index=False).agg(list)

   ID           numbers
0   0      [1, 2, 3, 4]
1   1        [abc, zzy]
2   2  [zz12, 22wq, 78]

Обратите внимание, что после каждой запятой в списке все еще будет пробел, поскольку именно так форматируется среда IDE. все списки, однако у каждого строкового элемента в списке есть все пробел из него.

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

Попробуйте, если значения имеют тип «[1, 2, 3]», а не [1, 2, 3], т.е. list: df ['numbers'] = df ['numbers']. Transform (lambda val : str (val) .replace ('', ''))

Но это сделает ваш столбец типа str. Если вы хотите вернуть значения в виде списка, то df ['numbers'] = df ['numbers']. Transform (лямбда-вэл: [x для x в ini_list.strip ('] [') .replace (',' , ''). split ('')]) Это вернет значения как элементы списка

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

с использованием lambda выражение:

df['numbers'] = df['numbers'].apply(lambda x : [str(y).strip() for y in x])

   ID           numbers
0   0      [1, 2, 3, 4]
1   1        [abc, zzy]
2   2  [zz12, 22wq, 78]
...