将多个字符串列表转换为Python数据框

时间:2019-09-19 09:32:15

标签: python string pandas list dataframe

我有一个字符串值列表,我使用splitlines从文本文档中读取了该字符串值。会产生这样的

       X = ["NAME|Contact|Education","SMITH|12345|Graduate","NITA|11111|Diploma"]

我已经尝试过

for i in X:
    textnew = i.split("|")
    data[x] = textnew

我想以此制作一个数据框

    Name     Contact      Education
    SMITH     12345        Graduate
    NITA      11111        Diploma

4 个答案:

答案 0 :(得分:2)

通过为sep指定一个pd.read_csv参数,可以直接从文件中读取它。

df = pd.read_csv("/path/to/file", sep='|')

或者,如果您希望将其从字符串列表中转换,则:

data = [row.split('|') for row in X]
headers = data.pop(0) # Pop the first element since it's header
df = pd.DataFrame(data, columns=headers)

答案 1 :(得分:1)

您实际上几乎正确无误,但不要将data用作字典(通过使用键-data[x] = textnew):

X = ["NAME|Contact|Education","SMITH|12345|Graduate","NITA|11111|Diploma"]
df = []

for i in X:
    df.append(i.split("|"))

print(df)

# [['NAME', 'Contact', 'Education'], ['SMITH', '12345', 'Graduate'], ['NITA', '11111', 'Diploma']]

依赖于进一步的转换,但是熊猫可能无法胜任这种任务

答案 2 :(得分:1)

这是您解决问题的方法

import pandas as pd
X = ["NAME|Contact|Education","SMITH|12345|Graduate","NITA|11111|Diploma"]
data = []
for i in X:
    data.append( i.split("|") )
df = pd.DataFrame( data, columns=data.pop(0))

答案 3 :(得分:1)

根据您的情况,您可以避免使用readlines加载文件,而避免使用熊猫来加载文件:

如上所述,该解决方案是标准的read_csv

import os
import pandas as pd
path = "/tmp"
filepath = "file.xls"
filename = os.path.join(path,filepath)
df = pd.read_csv(filename, sep='|')
print(df.head)

另一种方法(在这种情况下,当您无法访问文件或必须处理字符串列表时)可以将字符串列表包装为文本文件,然后使用熊猫正常加载

import pandas as pd
from io import StringIO

X = ["NAME|Contact|Education", "SMITH|12345|Graduate", "NITA|11111|Diploma"]
# Wrap the string list as a file of new line
DATA = StringIO("\n".join(X))
# Load as a pandas dataframe
df = pd.read_csv(DATA, delimiter="|")

这里是结果

enter image description here