如何将python列表转换为Pandas系列

时间:2018-02-14 09:27:54

标签: python pandas

我有一个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个元素

4 个答案:

答案 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