Прикрепить пустой список, если истина с 1 и с нулем в соответствии с данными в столбце панд? - PullRequest
0 голосов
/ 13 июня 2018
import pandas as pd
from pandas import DataFrame,Series
import numpy as np
titanic=pd.read_csv('C:/Users/prasun.j/Downloads/train.csv')
sex=[]
if titanic['Sex']=='male':
    sex.append(1)
else:
    sex.append(0)
sex

Я пытаюсь добавить список, который должен быть добавлен к 1, если в операторе встречается мужчина или к 0, когда встречается с женщиной, я не знаю, что я делаю неправильно, может кто-то выручить, заранее спасибо, выполнение выдает следующееошибка

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-6-265768ba34be> in <module>()
      4 titanic=pd.read_csv('C:/Users/prasun.j/Downloads/train.csv')
      5 sex=[]
----> 6 if titanic['Sex']=='male':
      7     sex.append(1)
      8 else:

C:\anaconda\lib\site-packages\pandas\core\generic.pyc in __nonzero__(self)
   1119         raise ValueError("The truth value of a {0} is ambiguous. "
   1120                          "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
-> 1121                          .format(self.__class__.__name__))
   1122 
   1123     __bool__ = __nonzero__

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Вы также можете использовать get_dummies, удаляя первый столбец (в данном случае, отбрасывая female):

df = pd.DataFrame({'sex': ['male', 'female', 'male', 'male', 'female','male'], 'age':[10,20,30,40,50,60]})

используйте pd.get_dummies, чтобы получить ваши значения:

sex = pd.get_dummies(df['sex'],drop_first=True)
sex
   male
0  1
1  0
2  1
3  1
4  0
5  1

А затем преобразовать в список:

list_sex = sex['male'].tolist()
list_sex

[1, 0, 1, 1, 0, 1]
0 голосов
/ 13 июня 2018

Когда вы проверяете if titanic['Sex']=='male', вы сравниваете male со всей серией, поэтому вы получаете ValueError.

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

Настройка

df = pd.DataFrame({'sex': ['male', 'female', 'male', 'male', 'female']})

Просто используйте np.where здесь:

np.where(df.sex == 'male', 1, 0)
# array([1, 0, 1, 1, 0])

Вы также можете использовать логическое индексирование:

(df.sex == 'male').astype(int).values.tolist()
# [1, 0, 1, 1, 0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...