首页 > 解决方案 > 如果 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'。

我该如何解决这个问题,是否有更好的方法来达到预期的效果?

标签: python

解决方案


您可以在列上运行 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

推荐阅读