如何在 Pandas 中为字符串添加前导零格式?

Posted

技术标签:

【中文标题】如何在 Pandas 中为字符串添加前导零格式?【英文标题】:How to add leading zero formatting to string in Pandas? 【发布时间】:2016-02-12 14:38:35 【问题描述】:

目标:用前导零格式化['Birth Month']

目前,我有这个代码:

import pandas as pd
import numpy as np

df1=pd.DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6])])
df1['Birth Year']= np.random.randint(1905,1995, len(df1))
df1['Birth Month']= str(np.random.randint(1,12, len(df1))).zfill(2)
df1

这会在['Birth Month'] 中生成一个值列表,这不是我需要的:

    A   B   Birth Year  Birth Month
0   1   4   1912        [4 5 9]
1   2   5   1989        [4 5 9]
2   3   6   1921        [4 5 9]

相反,我在['Birth Month'] 中寻找如下值和格式:

    A   B   Birth Year  Birth Month
0   1   4   1912        04
1   2   5   1989        12
2   3   6   1921        09

【问题讨论】:

【参考方案1】:

使用astype将系列的dtype转换为str,并使用矢量化str.zfill填充0

In [212]:
df1=pd.DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6])])
df1['Birth Year']= np.random.randint(1905,1995, len(df1))
df1['Birth Month']= pd.Series(np.random.randint(1,12, len(df1))).astype(str).str.zfill(2)
df1

Out[212]:
   A  B  Birth Year Birth Month
0  1  4        1940          09
1  2  5        1945          04
2  3  6        1962          03

您所做的只是分配一个标量值(这就是为什么每一行都相同)并将元素转换为列表的 str:

In [217]:
df1['Birth Month'].iloc[0]

Out[217]:
'[3 6 9]'

您可以在此处查看分配的结果分解:

In [213]:
(np.random.randint(1,12, len(df1)))

Out[213]:
array([5, 7, 4])

In [214]:
str(np.random.randint(1,12, len(df1))).zfill(2)

Out[214]:
'[2 9 5]'

【讨论】:

EdChum - 使用您的代码我遇到了一个 AttributeError:'StringMethods' 对象没有属性 'zfill'。我正在使用 Python 2.7.10。 你用的是什么版本的熊猫? EdChum - 我将 pandas 更新到当前版本,您的解决方案运行良好。谢谢。

以上是关于如何在 Pandas 中为字符串添加前导零格式?的主要内容,如果未能解决你的问题,请参考以下文章

如何在shell中为for循环添加前导零? [复制]

使用 Pandas 读取 CSV 时如何在列中保持前导零?

如何用前导零格式化资源字符串? [复制]

pandas使用zfill函数向dataframe特定数据列的每个字符串添加前置(前缀)补齐字符使得当前数据列内容所有字符长度相同(向列A的每个字符串添加前导零,直到达到4的宽度)

如何写没有前导零或前导空格的时间?

在 SQL Server 中为指定的值范围填充前导零的字符串