зацикливание с использованием .loc и передача условия в случае - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть DataFrame, содержащий 2 столбца - len и agr.Вот данные: фиктивные данные .

Я хочу вырезать некоторую часть из agr, если значение len равно 7. Вот фрагмент для того же:

for i in range(len(df)):
    print (i)

    if df.loc(i,'len')==7:
        print ("if",i)
        df['agr1'] = df.agr.str.slice(3,5)
        df['agr2'] = df.agr.str.slice(1,2)    
    else:
        print ("else",i)
        df['agr1'] = df.agr.str.slice(4)
        df['agrt2'] = df.agr.str.slice(3,6)

Однако я получаю сообщение об ошибке:

TypeError: __call__() takes from 1 to 2 positional arguments but 3 were given.

1 Ответ

0 голосов
/ 16 декабря 2018

Ваша ошибка TypeError вызвана тем, что .loc принимает скобки, например .loc[i, j], а не .loc(i, j)

import pandas as pd
import numpy as np

# Make new columns and fill them with nulls
df['agr1'] = np.nan
df['agr2'] = np.nan

# Find all the rows where len is 7
df_idx = df['len'] == 7 

# Set agr1 and agr2 where len is 7 
df.loc[df_idx, 'agr1'] = df.loc[df_idx, 'agr'].str.slice(4)
df.loc[df_idx, 'agr2'] = df.loc[df_idx, 'agr'].str.slice(3,6)

# Set agr1 and agr2 where len isn't 7
df.loc[~df_idx, 'agr1'] = df.loc[~df_idx, 'agr'].str.slice(3,5)
df.loc[`df_idx, 'agr2'] = df.loc[~df_idx, 'agr'].str.slice(1,2)

Как всегда, без каких-либо данных, я понятия не имею, если это то, что вы хотели быделать или если это неправильно (или сломано).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...