1

我在 DF 中有一只熊猫系列,就像这个:

DF=pd.DataFrame([1,2,58,99,123,256],columns=["ID"])

    ID
0   1
1   2
2   58
3   99
4   123
5   256

我正在尝试修改“ID”列,以便获得类似的内容(始终为三个字符,因此长度<3的数字为一或两个零):

    ID
0   "001"
1   "002"
2   "058"
3   "099"
4   "123"
5   "256"

我试图通过列表理解、astype(str)、replace() 和 str.len() 来实现这一点,如下所示:

DF["ID"]=[x.replace(x, i*"0"+x) for x,i in (DF["ID"].astype(str),int(DF[DF["ID"]].astype(str).len())-3)]

但是后来我遇到了这个错误

KeyError: "None of [Int64Index([1, 2, 58, 99, 123, 256], dtype='int64')] are in the [columns]"

我该如何解决?

4

3 回答 3

1

您遇到的错误是因为您试图传递“ID”系列中的值,就好像它是列标签列表一样。有一种更简单的方法可以使用 pandas apply 和 str.rjust() 方法将宽度设置为 3 以将字符串填充为 3 个字符:

df = pd.DataFrame(dict(ID=[1,2,58,99,123,256]))

df['ID'] = df['ID'].apply(lambda x: str(x).rjust(3,'0'))

输出:

    ID
0   "001"
1   "002"
2   "058"
3   "099"
4   "123"
5   "256"
于 2021-04-03T12:55:27.290 回答
0

你使用带格式的 f 字符串

DF['ID'] = DF['ID'].apply(lambda v: f'{v:03d}')

输出(这些是字符串顺便说一句)


    ID
0   001
1   002
2   058
3   099
4   123
5   256
于 2021-04-03T12:58:17.447 回答
0

在我看来,最惯用的方式是:

>>> DF['ID'] = DF['ID'].astype(str).str.rjust(3, '0')                           
>>> DF                                                                          
    ID
0  001
1  002
2  058
3  099
4  123
5  256
于 2021-04-03T13:14:15.077 回答