python - 如果 Pandas Dataframe 中的项目长度 = 3 添加“XXX00”,如果 Pandas Dataframe 中的项目长度 = 2 添加“XXX000”,否则什么也不做
问题描述
我在 Pandas 中有数据框,如果长度小于 4,则需要向 ItemNUMBER 添加字符。
因此,长度为 1 的项目的 ItemNUMBER 将在其前面添加“XXX00”,因此“5”将是“XXX0005”,长度为 2 的 ItemNUMBER 需要在前面添加 XXX00,因此“10”将是“XXX0010”,ItemNUMBER 与长度前面三个需要 'XXX0',所以 '111' 将被替换为 'XXX0111' 并且 ItemNUMBER 长度 4 将保持不变。
我有:
lenitem = DF['ItemNUMBER'].str.len()
if lenitem ==1:
DF['ItemNUMBER'] = 'XXX000' + DF['ItemNUMBER'].astype(str)
elif lenitem ==2:
DF['ItemNUMBER'] = 'XXX00' + DF['ItemNUMBER'].astype(str)
elif lenitem ==3:
DF['ItemNUMBER'] = 'XXX0' + DF['ItemNUMBER'].astype(str)
else:
DF['ItemNUMBER']
但得到以下错误:
ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
目标输出是 ItemNUMBER '4676' 保持不变,ItemNUMBER '5' 到 = 'XXX0005',ItemNUMBER '10' 到 = 'XXX0010'。
我该如何解决这个问题,是否有更好的方法来达到预期的效果?
解决方案
您可以在列上运行 lambda 以获得预期的结果。
如果 columnItemNUMBER
是一个字符串,你可以使用它;
df['nums'].apply(lambda x: 'XXX000'+x if len(x)==1 else 'XXX00'+x if len(x)==2 else'XXX0'+x if len(x)==3 else x)
它基本上遍历整个列并为每个值执行该操作。
你也可以认为它是这样写的;
for value in nums:
if len(x)==1:
value = 'XXX000'+value
elif len(x)==2:
value = 'XXX00'+value
elif len(x)==3:
value = 'XXX0'+value
else:
value
推荐阅读
- prolog - 如何在列表中找到一些特定的节点/元素?
- python - 如何正确优化热剖面上的拟合数据?
- angular - 此页面不适用于服务器端 iis (.netcore 2.2)
- java - 使用 Maven-Cargo pluin 热部署 JavaEE 应用
- python - NLTK punkt 句子标记器在数字项目符号上拆分
- android - 使用 navGraphViewModels 访问子 NavHostFragment 的图形范围 ViewModel
- android - 如何初始化 LinearLayout 变量?
- swift - 如何从 NSDictionary 检索引号之间的 Int
- c - 从类型 'int (*)[1000] 分配给类型 'int[100][1000]' 时的类型不兼容
- node.js - 通过原始回调模拟方法和调用