Reputation: 43
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:
how can I do?
Upvotes: 0
Views: 177
Reputation: 17368
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)
Upvotes: 2
Reputation: 8302
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
Upvotes: 0
Reputation: 51643
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
Upvotes: 1