2015-04-26 313 views
1

我有以下格式的列表:Python列表以大熊猫数据帧

a=['date name','10150425010245 name1','10150425020245 name2'] 

我试图将其转换为大熊猫DF:

newlist=[] 
for item in a: 
    newlist.append(item.split(' ')) 

现在,将它转换为DF:

pd.DataFrame(newlist) 

其中结果为

    0  1 
0    date name 
1 10150425010245 name1 
2 10150425020245 name2 

我想要'日期'和'名称'为标题,但我无法设法做到这一点。有没有一种更有效的方法来自动将字符串列表转换为数据框而不是这个?

回答

2

下面是一种方法。

使用列表推导而不是循环。

In [160]: data = [x.split('') for x in a] 

In [161]: data 
Out[161]: [['date', 'name'], ['10150425010245', 'name1'], ['10150425020245', 'name2']] 

然后用data[1:]的价值观和data[0]列名。

In [162]: pd.DataFrame(data[1:], columns=data[0]) 
Out[162]: 
      date name 
0 10150425010245 name1 
1 10150425020245 name2 
+0

谢谢!这工作。它应该是x.split(''),但除此之外它可以工作。 – Anastasia

+0

感谢您的编辑。 – Zero

4

你是在正确的轨道上。稍作修改,您的代码就可以正常工作。

import pandas as pd 
    a=['date name','10150425010245 name1','10150425020245 name2'] 
    newlist=[] 
    for item in a: 
     newlist.append(item.split(' ')) 

    newlist2=pd.DataFrame(newlist,columns=["date","name"])[1:] 

    newlist2 

    date   name 
    10150425010245 name1 
    10150425020245 name2 
1

诱惑总结一行已经给出答案:

a=['date name','10150425010245 name1','10150425020245 name2'] 
pd.DataFrame(
    map(str.split, a)[1:], 
    columns=a[0].split(), 
) 

输出:

Out[8]: 
       date name 
0 10150425010245 name1 
1 10150425020245 name2 
+0

多数民众赞成酷! thx :) –

+0

不完全。这里有两个问题。 1)输出将有列名在那里重复,而应该是'pd.DataFrame(map(str.split,a)[1:],columns = ['date','name'])'2)列名应该而是从列表中取出而不是手动传递它。 – Zero

+0

从1开始的索引是一件麻烦事。用你的评论更新它。 – fixxxer