Как изменить столбец списка списков на обычный список в панде DataFrame? - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть датафрейм Pandas.Одним из его столбцов является список списков.

enter image description here

Как лучше всего сделать следующее:

  1. Заполнить пустые списки в столбце list_of_lists словом «прочее»? например, [] должно стать ['other']
  2. Изменить столбец list_of_lists в обычный категориальный список?В итоге должно получиться так ...

enter image description here

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

IIUC

df.A=[x if x  else ['other']  for x in df.A  ]
df
Out[298]: 
          A
0   [other]
1   [steel]
2   [steel]
3   [other]
4  [tarmac]
5   [other]
0 голосов
/ 23 ноября 2018

Еще один трюк:

>>> df
          A
0        []
1   [steel]
2   [steel]
3        []
4  [tarmac]
5        []

>>> df.A.apply(lambda y: "[other]"  if len(y)==0 else y)
0     [other]
1     [steel]
2     [steel]
3     [other]
4    [tarmac]
5     [other]
Name: A, dtype: object

ИЛИ:

  >>> df['A'].apply(lambda x: x if x else ['other'])
0     [other]
1     [steel]
2     [steel]
3     [other]
4    [tarmac]
5     [other]
Name: A, dtype: object
0 голосов
/ 23 ноября 2018

Есть много причин, по которым вы не должны использовать списки в объектах серии Pandas.Ваш первый порт вызова должен состоять в том, чтобы извлечь строки и преобразовать ваши серии в категориальные данные:

df = pd.DataFrame({'A': [[], ['steel'], ['steel'], [], ['tarmac'], []]})

df['A'] = df['A'].str[0].fillna('other').astype('category')

print(df)

        A
0   other
1   steel
2   steel
3   other
4  tarmac
5   other

Если вы настаиваете на использовании неэффективных и не векторизованных операций через циклы уровня Python, то выможно достичь желаемого следующим образом:

df['A'] = df['A'].str[0].fillna('other').apply(lambda x: [x])

print(df)

          A
0   [other]
1   [steel]
2   [steel]
3   [other]
4  [tarmac]
5   [other]

На этом этапе категориальные данные не являются опцией, поскольку серии списков не поддерживаются категориями, поскольку list не может быть хэш.

...