我有一个处理多个文件的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
如何实现它。找不到能做到这一点的东西
答案 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