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

时间:2015-11-11 13:34:22

标签: python string numpy pandas dataframe

目标:使用前导零格式化['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 个答案:

答案 0 :(得分:6)

使用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]'