Истинная ценность Серии неоднозначна.Используйте a.empty, a.bool (), a.item (), a.any () или a.all (), используя panda python - PullRequest
0 голосов
/ 03 декабря 2018

Здесь у меня есть данные для импорта из файла CSV. Я написал уравнение внутри класса и для решения уравнения данные будут импортированы из файла CSV.Когда я запускаю свой код, я получаю сообщение об ошибке типа «индексы кортежа должны быть целыми числами или кусочками, а не str» при использовании panda python.Может ли кто-нибудь помочь мне решить эту проблему?Я загружаю свой код и файл CSV здесь.

def time_convert(x):
    h,m,s = map(int,x.split(':'))
    return (h*60+m)

def ph_convert(time,we,h,a,w):
    while time <= 30:
        level = 1.1
        level = float(level)
        if w == 1:
            ph= ((((6*we)+(1*h))/level -(4*a)))/time
        else:
            ph= ((6+((1*we)+(3*h))/level -(6 *a)))/time  
        break
    while time <=60:
        level = 1.25
        level = float(level)
        if w == 1:
            ph= ((((6*we)+(1*h))/level -(4*a)))/time
        else:
            ph= ((6+((1*we)+(3*h))/level -(6 *a)))/time  
        break
    print(ph)

data = pd.read_csv('data1.csv')
data['time'] = data['time'].apply(time_convert)
we = data['we'].astype(float)
h = data['h'].astype(float)
a = data['a'].astype(float)
w = data['w'].astype(float)
time = data['time'].astype(float)
print(ph_convert(time,we,h,a,w))

Подмножество моего файла CSV:

we      h   a   w   time
48.1    150 53  1   6:15:00
48.1    150 53  1   9:00:00
48.1    150 53  1   9:25:00
48.1    150 53  1   9:30:00
48.1    150 53  1   11:00:00

Ошибка:

ValueError                                Traceback (most recent call last)
<ipython-input-922-9fe360350b03> in <module>()
----> 1 print(ph_convert(time,we,h,a,w))

<ipython-input-904-73455dabb050> in ph_convert(time, we, h, a, w)
      3    
----> 5         while time <= 30:
      6             level = 1.1
      7             level = float(level)

~\Anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
   1571         raise ValueError("The truth value of a {0} is ambiguous. "
   1572                          "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
-> 1573                          .format(self.__class__.__name__))
   1574 
   1575     __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 голосов
/ 03 декабря 2018

Вы можете изменить свою функцию следующим образом:

def ph_convert(x):
    print(x.time)
    print(type(x.time))
    ph = 2500
    if x.time <= 30:
        level = float(1.1)
        if x.w == 1:
            ph= ((((6*x.we)+(1*x.h))/level -(4*x.a)))/x.time
        else:
            ph= ((6+((1*x.we)+(3*x.h))/level -(6 *x.a)))/x.time  
    elif x.time <=60:
        level = 1.25
        if x.w == 1:
            ph= ((((6*x.we)+(1*x.h))/level -(4*x.a)))/x.time
        else:
            ph= ((6+((1*x.we)+(3*x.h))/level -(6 *x.a)))/x.time
    return ph

Затем используйте apply :

data['ph'] = data.apply(ph_convert, axis =1)
0 голосов
/ 03 декабря 2018

Вы можете изменить while на if и elif и добавить else, если time > 60:

def ph_convert(time,we,h,a,w):
    if time <= 30:
        level = 1.1
        if w == 1:
            ph= ((((6*we)+(1*h))/level -(4*a)))/time
        else:
            ph= ((6+((1*we)+(3*h))/level -(6 *a)))/time  
    elif time <=60:
        level = 1.25
        if w == 1:
            ph= ((((6*we)+(1*h))/level -(4*a)))/time
        else:
            ph= ((6+((1*we)+(3*h))/level -(6 *a)))/time  
    else:
        ph = np.nan

    return ph

И присвоить обратные значения столбцам:

data['time'] = data['time'].apply(time_convert).astype(float)
data['we'] = data['we'].astype(float)
data['h'] = data['h'].astype(float)
data['a'] = data['a'].astype(float)
data['w'] = data['w'].astype(float)

Последний вызов apply с axis=1 для процессов на строки:

print(data.apply(lambda x: ph_convert(x.time,x.we,x.h,x.a,x.w), axis=1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...