Python:检查熊猫列值的长度是否满足条件

时间:2020-09-29 23:33:22

标签: python pandas

我有一个处理多个文件的python程序。每个文件都有基于部门的客户ID列。某些文件具有8位客户ID,而某些文件具有9位客户ID。 我需要这样做

if length of customer id column value is == 8:
    input_file['customer_id'] = input_file['customer_id'].str[0:2] + '-' + input_file['customer_id'].str[2:8]
if length of customer id column value is == 9:
    input_file['customer_id'] = 'K' + '-' + input_file['customer_id'].str[0:3] + '-' + input_file['customer_id'].str[3:8]

输入

id cusotmerid
1  89898988
2  898989889

输出

id cusotmerid
1  89-898988
2  K-898-989889

如何实现它。找不到能做到这一点的东西

2 个答案:

答案 0 :(得分:2)

您也可以这样做。

您可以将pd.Series.map与内置的len一起使用来找出列值的长度。这样,您就可以确定如何分配值。

使用astype(str)将数字值转换为字符串,以便您可以进行字符串连接。

input_file.loc[input_file['cusotmerid'].astype(str).map(len) == 8, 'new_customer_id'] = input_file['cusotmerid'].astype(str).str[:2]+ '-' + input_file['cusotmerid'].astype(str).str[2:]

input_file.loc[input_file['cusotmerid'].astype(str).map(len) == 9, 'new_customer_id'] = 'K-' + input_file['cusotmerid'].astype(str).str[:3] + '-' + input_file['cusotmerid'].astype(str).str[3:]

这应该是新的值分配。

此输出为:

   cusotmerid new_customer_id
0    89898988       89-898988
1   898989889    K-898-989889

答案 1 :(得分:1)

您可以使用np.select。为了检查字符串的长度,必须首先确保列的格式为字符串,因此为.astype(str)。然后,您可以使用.apply(lambda x: len(x) == condition)根据以下条件返回结果:

import numpy as np
input_file['cusotmerid'] = input_file['cusotmerid'].astype(str)
input_file['cusotmerid'] = np.select([input_file['cusotmerid'].apply(lambda x: len(x) == 8),
                                     input_file['cusotmerid'].apply(lambda x: len(x) == 9)],
                                     [input_file['cusotmerid'].str[0:2] + '-' + input_file['cusotmerid'].str[2:8],
                                     'K' + '-' + input_file['cusotmerid'].str[0:3] + '-' + input_file['cusotmerid'].str[3:9]],
                                      input_file['cusotmerid'])
input_file

    id  cusotmerid
0   1   89-898988
1   2   K-898-989889

np.select语句分解为条件和结果可能会更容易。我传递的3个参数是条件,结果和如果不满足条件的默认值。

input_file['cusotmerid'] = input_file['cusotmerid'].astype(str)

c1 = input_file['cusotmerid'].apply(lambda x: len(x) == 8)
c2 = input_file['cusotmerid'].apply(lambda x: len(x) == 9)

conditions = [c1, c2]

r1 = input_file['cusotmerid'].str[0:2] + '-' + input_file['cusotmerid'].str[2:8]
r2 = 'K' + '-' + input_file['cusotmerid'].str[0:3] + '-' + input_file['cusotmerid'].str[3:9]

results = [r1,r2]

input_file['cusotmerid'] = np.select(conditions, results, input_file['cusotmerid'])
input_file

    id  cusotmerid
0   1   89-898988
1   2   K-898-989889