#python #pandas
#python #pandas
Вопрос:
Я хотел бы присвоить двоичное значение (1 или 0) независимо от того, содержит ли столбец не пустые / пустые списки.
Например:
Country Test
Germany []
Italy ['pizza']
United Kingdom ['queen', 'king','big']
France ['Eiffel']
Spain []
...
Чего я ожидал бы, так это чего-то подобного:
Country Test Binary
Germany [] 0
Italy ['pizza'] 1
United Kingdom ['queen', 'king','big'] 1
France ['Eiffel'] 1
Spain [] 0
...
Я не знаю, как использовать np.where
или другой, чтобы получить эти результаты.
Я думаю, чтобы проверить, содержит ли столбец пустой список, я должен сделать что-то вроде этого: df[df['Test'] != '[]']
Комментарии:
1.
df['Binary'] = (df['Test'] != []).astype(int)
2. получение этой ошибки: ValueError: длины должны совпадать для сравнения
3. попробуйте
df['Binary'] = (df['Test'].neq([])).astype(int)
тогда4. Наконец, рабочее решение:
df['Test'].astype(bool).astype(int)
5.
df['Binary'] = (df['Test'].str.len() != 0).astype(int)
сработало для меня.
Ответ №1:
Вы можете выполнить простую проверку длины и на основе значения преобразовать его в 0 или 1.
df['Binary'] = (df['Test'].str.len() != 0).astype(int)
Хотя это хорошо, наиболее эффективный способ сделать это был предоставлен @Marat.
df['Binary'] = df['Test'].astype(bool).astype(int)
Полный код здесь:
import pandas as pd
c = ['Country','Test']
d = [['Germany',[]],
['Italy',['pizza']],
['United Kingdom', ['queen', 'king','big']],
['France',['Eiffel']],
['Spain',[]]]
df = pd.DataFrame(data=d,columns=c)
df['Binary'] = df['Test'].astype(bool).astype(int)
print (df)
Результатом этого будет:
Country Test Binary
0 Germany [] 0
1 Italy [pizza] 1
2 United Kingdom [queen, king, big] 1
3 France [Eiffel] 1
4 Spain [] 0
Ответ №2:
Использовать str.len
:
np.clip(df.Test.str.len(), 0, 1)
#or
(df.Test.str.len()==0).astype(int)