代码之家  ›  专栏  ›  技术社区  ›  Jordan

Python函数读取长度无效

  •  1
  • Jordan  · 技术社区  · 7 年前

    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 回复  |  直到 7 年前
        1
  •  1
  •   Yuca    7 年前

    这是因为您在每次迭代中都要求相同事物的长度(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
    
        2
  •  1
  •   jpp    7 年前

    不要手动迭代行。可以使用“将新列指定给条件逻辑”:

    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
    
        3
  •  0
  •   J. Doe    7 年前

    你只要找到你的 17

    condition = (df["vin"].str.len() == 17)
    print(df[condition])
    
        4
  •  0
  •   quest    7 年前

    您只需要:

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