简体   繁体   中英

how to add leading zeros to a series of numbers in a dataframe, and then add a suffix?

I have a question on manipulate dataframe. in my case, the dataframe has a column where there are numbers staring from 1 to 1999.

I want to do the following actions:

  1. to add zeros before the numbers to make them a 6-digit code, for example, 0000001,000002,...001999
  2. to add a suffix to the 6-digit code, for example, 000001xx,000002xx,...001999xx

how can I do?

In [93]: df = pd.DataFrame({"num":range(1, 2000)})
In [94]: df
Out[94]:
       num
0        1
1        2
2        3
3        4
4        5
...    ...
1994  1995
1995  1996
1996  1997
1997  1998
1998  1999

[1999 rows x 1 columns]
In [97]: df["new_num"] = df["num"].map("{0:0=6d}".format)
In [98]: df["new_num"] = df["new_num"] + "xx"

In [99]: df
Out[99]:
       num   new_num
0        1  000001xx
1        2  000002xx
2        3  000003xx
3        4  000004xx
4        5  000005xx
...    ...       ...
1994  1995  001995xx
1995  1996  001996xx
1996  1997  001997xx
1997  1998  001998xx
1998  1999  001999xx

[1999 rows x 2 columns]

You can combine the above 2 steps to one

df["num"].map("{0:0=6d}xxx".format)

You can create a string from your number by applying a lambda (or map see bigbounty's answer ) to calculate a formatted string column:

import pandas as pd


df = pd.DataFrame(({ "nums": range(100,201)}))

# format the string in one go
df["modded"] = df["nums"].apply(lambda x:f"{x:06n}xxx")
print(df)

Output:

     nums     modded
0     100  000100xxx
1     101  000101xxx
2     102  000102xxx
..    ...        ...
98    198  000198xxx
99    199  000199xxx
100   200  000200xxx

Just use str.rjust

import pandas as pd

df = pd.DataFrame({"num": range(1, 2000)})

print(df.num.astype(str).str.rjust(6, '0') + "xx")

0       000001xx
1       000002xx
2       000003xx
3       000004xx
4       000005xx
          ...   
1994    001995xx
1995    001996xx
1996    001997xx
1997    001998xx
1998    001999xx

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM