为Pandas DataFrame含NumPy数组的列补前导零
解决Pandas中列表元素的前导零填充问题
嘿,我明白你遇到的麻烦了——之前的代码之所以失效,是因为你误把整个列表当成单个字符串处理了,而没有遍历列表里的每个数字元素。咱们来一步步修正这个问题:
问题根源分析
你之前的代码:
df['A'] = df['A'].astype(str) df['A'] = df['A'].apply(lambda x: x.zfill(10))
这里的astype(str)会把每一行的整个列表转换成一个字符串(比如变成"[11234466, 77777777, 12345678, 23452345]"),之后的zfill(10)只是给这个长字符串的头部补零,根本没触及列表里的单个数字,所以才会出现奇怪的输出。
正确的解决方案
我们需要针对每个列表里的单个数字进行格式化,用apply遍历每一行的列表,再用列表推导式处理每个元素:
方法1:使用f-string格式化(推荐)
df['A'] = df['A'].apply(lambda lst: [f"{num:010d}" for num in lst])
这里的f"{num:010d}"会把每个整数格式化为10位长度,不足的地方自动补前导零。
方法2:使用str.zfill()
如果你更喜欢用zfill,也可以先把数字转成字符串再补零:
df['A'] = df['A'].apply(lambda lst: [str(num).zfill(10) for num in lst])
验证效果
运行上述代码后,你的DataFrame会变成预期的样子:
A 0 [0011234466, 0077777777, 0012345678, 0023452345] 1 [0099999999, 0066666666, 0044332211, 0056781234]
内容的提问来源于stack exchange,提问作者JDoe
相关产品推荐
相关产品推荐

