Python函数读取长度不起作用

时间:2018-10-05 12:45:18

标签: python python-3.x pandas function

我正在尝试开发一个检查VIN长度并返回输出的函数。

要进行测试,如果长度= 17,我可以将vin打印出来。不知道我在做什么错。

下面的代码示例。

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 :(得分:1)

那是因为您在每次迭代中都要求相同对象的长度(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

答案 1 :(得分:1)

不要手动迭代行。您可以使用条件逻辑分配新列:

timeout :5000

答案 2 :(得分:0)

您可以按照以下步骤找到17个长度的行

condition = (df["vin"].str.len() == 17)
print(df[condition])

答案 3 :(得分:0)

您需要的是:

df[df.vin.str.len()==17]