Python 列表到 Pandas 数据框

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/29882965/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 23:15:58  来源:igfitidea点击:

Python list to pandas dataframe

pythonpandas

提问by Anastasia

I have a list that follows this format:

我有一个遵循这种格式的列表:

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

I am trying to convert this to Pandas df:

我正在尝试将其转换为 Pandas df:

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

Now, convert this to df:

现在,将其转换为 df:

pd.DataFrame(newlist)

which results in

这导致

                  0     1
0              date  name
1    10150425010245 name1
2    10150425020245 name2

I want to have 'date' and 'name' as header, but I can't manage to do that. Is there a more efficient way to automatically convert a list of strings into a dataframe than this?

我想将“日期”和“名称”作为标题,但我无法做到这一点。有没有比这更有效的方法来自动将字符串列表转换为数据框?

回答by Zero

Here's one approach.

这是一种方法。

Use list comprehensions instead of loops.

使用列表理解而不是循环。

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

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

Then use data[1:]as values and data[0]as column names.

然后data[1:]用作值和data[0]列名。

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

回答by Amrita Sawant

you were on the right track. With slight modification, your code works fine.

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

    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

回答by fixxxer

Tempted to summarise the answers already given in one line:

试图总结已经在一行中给出的答案:

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

Output:

输出:

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