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