Длина чтения функции Python не работает - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь разработать функцию, которая проверяет длину VIN и возвращает вывод.

Чтобы проверить, я должен распечатать vin, если длина = 17. Тем не менее, он четко распечатывает все.Не уверен, что я делаю не так.

Пример кода ниже.

import pandas as pd

#initialization
df = pd.DataFrame(columns = ["vin"], data = ['LHJLC79U58B001633','SZC84294845693987','LFGTCKPA665700387','L8YTCKPV49Y010001',
                                         'LJ4TCBPV27Y010217','LFGTCKPM481006270','LFGTCKPM581004253','LTBPN8J00DC003107',
                                         '1A9LPEER3FC596536','1A9LREAR5FC596814','1A9LKEER2GC596611','1A9L0EAH9C596099',
                                         '22A000018'])

df['manufacturer'] = ['A','A','A','A','B','B','B','B','B','C','C','D','D']

#develop function
def check_vin(df):
    if len(df['vin'][1]) == 17:
        print(df['vin'])
    else:
        print('nogo')


#test the function
for index, row in df.iterrows():
    check_vin(df)

Ответы [ 4 ]

0 голосов
/ 05 октября 2018

Не повторять строки вручную.Вы можете использовать назначение нового столбца с условной логикой:

df['check'] = np.where(df['vin'].str.len().eq(17), df['vin'], 'nogo')

print(df)

                  vin manufacturer              check
0   LHJLC79U58B001633            A  LHJLC79U58B001633
1   SZC84294845693987            A  SZC84294845693987
2   LFGTCKPA665700387            A  LFGTCKPA665700387
3   L8YTCKPV49Y010001            A  L8YTCKPV49Y010001
4   LJ4TCBPV27Y010217            B  LJ4TCBPV27Y010217
5   LFGTCKPM481006270            B  LFGTCKPM481006270
6   LFGTCKPM581004253            B  LFGTCKPM581004253
7   LTBPN8J00DC003107            B  LTBPN8J00DC003107
8   1A9LPEER3FC596536            B  1A9LPEER3FC596536
9   1A9LREAR5FC596814            C  1A9LREAR5FC596814
10  1A9LKEER2GC596611            C  1A9LKEER2GC596611
11   1A9L0EAH9C596099            D               nogo
12          22A000018            D               nogo
0 голосов
/ 05 октября 2018

Это потому, что вы запрашиваете длину одной и той же вещи на каждой итерации (df ['vin'] [1])

Измените на

for index, row in df.iterrows():
   check_vin(row)

И

def check_vin(r):
    if len(r.vin) == 17:
        print(r)
    else:
        print('nogo')

Выход

LHJLC79U58B001633
SZC84294845693987
LFGTCKPA665700387
L8YTCKPV49Y010001
LJ4TCBPV27Y010217
LFGTCKPM481006270
LFGTCKPM581004253
LTBPN8J00DC003107
1A9LPEER3FC596536
1A9LREAR5FC596814
1A9LKEER2GC596611
nogo
nogo
0 голосов
/ 05 октября 2018

Все, что вам нужно, это:

df[df.vin.str.len()==17]
0 голосов
/ 05 октября 2018

Вы можете просто найти строки длиной 17, как показано ниже

condition = (df["vin"].str.len() == 17)
print(df[condition])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...