我有一个python列表l。列表的前几个元素如下所示
[751883787]
[751026090]
[752575831]
[751031278]
[751032392]
[751027358]
[751052118]
我想将此列表转换为pandas.core.series.Series,其中2个领先0.我的最终结果将如下所示
00751883787
00751026090
00752575831
00751031278
00751032392
00751027358
00751052118
我在Windows环境下使用Python 3.x。你能建议我怎么做吗? 我的列表中还包含大约2000000个元素
答案 0 :(得分:5)
你可以尝试:
list=[121,123,125,145]
series='00'+pd.Series(list).astype(str)
print(series)
输出:
0 00121
1 00123
2 00125
3 00145
dtype: object
答案 1 :(得分:4)
首先使用带有列的DataFrame
构造函数,然后转换为string
,如果嵌套0
s,则Series.str.zfill
最后添加list
:
lst = [[751883787],
[751026090],
[752575831],
[751031278],
[751032392],
[751027358],
[751052118]]
s = pd.DataFrame(lst, columns=['a'])['a'].astype(str).str.zfill(11)
print (s)
0 00751883787
1 00751026090
2 00752575831
3 00751031278
4 00751032392
5 00751027358
6 00751052118
Name: a, dtype: object
如果只有一个list
:
lst = [751883787,
751026090,
752575831,
751031278,
751032392,
751027358,
751052118]
s = pd.Series(lst).astype(str).str.zfill(11)
print (s)
0 00751883787
1 00751026090
2 00752575831
3 00751031278
4 00751032392
5 00751027358
6 00751052118
dtype: object
答案 2 :(得分:2)
这是一种方式。
from itertools import chain; concat = chain.from_iterable
import pandas as pd
lst = [[751883787],
[751026090],
[752575831],
[751031278]]
pd.DataFrame({'a': pd.Series([str(i).zfill(11) for i in concat(lst)])})
a
0 00751883787
1 00751026090
2 00752575831
3 00751031278
一些基准测试,因为您的数据框很大,所以相关:
from itertools import chain; concat = chain.from_iterable
import pandas as pd
lst = [[751883787],
[751026090],
[752575831],
[751031278],
[751032392],
[751027358],
[751052118]]*300000
%timeit pd.DataFrame(lst, columns=['a'])['a'].astype(str).str.zfill(11)
# 1 loop, best of 3: 7.88 s per loop
%timeit pd.DataFrame({'a': pd.Series([str(i).zfill(11) for i in concat(lst)])})
# 1 loop, best of 3: 2.06 s per loop
答案 3 :(得分:1)
两个给定的答案都是有用的......下面是总结一个
import pandas as pd
mylist = [751883787,751026090,752575831,751031278]
mysers = pd.Series(mylist).astype(str).str.zfill(11)
print (mysers)
./test
0 00751883787
1 00751026090
2 00752575831
3 00751031278
dtype: object
另一种方法是,使用astype将系列的dtype转换为str并使用vectorised str.zfill填充00,尽管使用lamda将更容易阅读..
import pandas as pd
mylist = pd.DataFrame([751883787,751026090,752575831,751031278], columns=['coln'])
result = mylist.coln.apply(lambda x: str(int(x)).zfill(11))
print(result)
以下是结果..
./test
0 00751883787
1 00751026090
2 00752575831
3 00751031278
Name: coln, dtype: object