我有一个示例 pandas 数据框 (df),具有以下值:
姓名 | 标签 |
---|---|
猫 | A12 |
狗 | 67 |
鼠标 | 20 |
猴子 | 10.8 |
鹦鹉 | V20.6 |
我需要更新标签列的值,该列混合了数字标签和整数标签,但存储为字符串,在某些情况下具有前导零。
我需要的是标签长度小于3的地方,需要有一个前导零,并且小数点左边的数字长度小于3的地方,也需要有这个前导零。
所以,我需要的表输出是:
姓名 | 标签 |
---|---|
猫 | A12 |
狗 | 067 |
鼠标 | 020 |
猴子 | 010.8 |
鹦鹉 | V20.6 |
我已经为第一个标准尝试了一些不同的 df.loc 迭代,其中长度等于 3,但我收到了一个以前从未遇到过的错误,并且找不到太多信息:“无法使用单个 bool 来索引 setitem”
我什至不知道如何实现第二个标准。还可能吗?
代码
# If there are integers mixed in the 'Label' column, convert to str
df['Label'] = df['Label'].astype('str')
# condition
cond = df['Label'].str.extract('(^\d+)')[0].str.len().lt(3)
# boolean masking: If the condition is True, pad with a leading '0'
df['Label'] = df['Label'].mask(cond, df['Label'].radd('0'))
df