Мне нужно добавить новый столбец в моем фрейме данных, основываясь на условии из столбца 3 . Я получаю ошибку: ValueError: Значение истинности Серии неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all () Ценю любую помощь! Мой файл выглядит следующим образом:

2017;Jan;TURKRETAIL;7000007;[ICP None];ClosingBal_Input;Cost;Retail;LocalGAAPInput;C; 14,947.00 
2017;Jan;TURKRETAIL;5103001;[ICP None];ClosingBal_Input;BS_Input;Retail;LocalGAAPInput;C; 90,798.00 
2017;Jan;TURKRETAIL;7000002;[ICP None];ClosingBal_Input;BS_Input;Retail;LocalGAAPInput;D; 8,500.00 
2017;Jan;TURKRETAIL;2769601;[ICP None];NOPRODUCT;Operations;0;LocalGAAPInput;D; 684.00

И Кодекс:

import pandas as pd
file_to_open=("C:\\Users\\yannis\\py_script\\py2\\tst1.txt")
file_output=("C:\\Users\\yannis\\py_script\\py2\\tst2.txt")

df = pd.read_csv(file_to_open,sep=";",encoding="utf8",header=None)

df[3] = df[3].astype(str).str.strip()

def f(self):
    if  df[3].str.startswith('2',na=False):
        val = 'Mvmts_NetIncome'
    elif df[3].str.startswith('5',na=False):
        val = 'Other'
        return val
    df[11] = df.apply(f,axis=1)

df.to_csv (file_output,sep=";",encoding="utf8",header=None)
print(df)
0
user1766419 14 Апр 2020 в 16:52

2 ответа

Лучший ответ

Попробуй это

import pandas as pd
file_to_open=("C:\\Users\\yannis\\py_script\\py2\\tst1.txt")
file_output=("C:\\Users\\yannis\\py_script\\py2\\tst2.txt")

df = pd.read_csv(file_to_open,sep=";",encoding="utf8",header=None)

df[3] = df[3].astype(str).str.strip()

def f(row): #give an argument to f
    if  row[3].str.startswith('2',na=False): #use the argument as row name not df
        val = 'Mvmts_NetIncome'
    elif row[3].str.startswith('5',na=False):
        val = 'Other'
        return val

df[11] = df.apply(f,axis=1) #this shouldn't be inside the function

df.to_csv (file_output,sep=";",encoding="utf8",header=None)
print(df)

0
trigonom 14 Апр 2020 в 15:23

Если вы хотите применить функцию к каждой строке, то функция должна получить ряд строк, но каждый элемент row_serie[3] является строкой, поэтому нет необходимости использовать метод str пользователя:

def f(row_serie):
    val = ''
    if  row_serie[3].startswith('2'): 
         val = 'Mvmts_NetIncome'
    elif row_serie[3].startswith('5'):
        val = 'Other'
    return val

df[11] = df.apply(f,axis=1)

Попробуйте добавить значение по умолчанию, если столбец 3 не начинается с 2 или 5.

0
jcaliz 14 Апр 2020 в 19:10