Преобразовать список из нескольких строк во фрейм данных Python - PullRequest
2 голосов
/ 19 сентября 2019

У меня есть список строковых значений, которые я прочитал из текстового документа с 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 ]

2 голосов
/ 19 сентября 2019

Вы можете прочитать его прямо из своего файла, указав аргумент 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 голос
/ 19 сентября 2019

В вашей ситуации вы можете избежать загрузки файла с помощью readlines и использовать pandas для заботы о загрузке файла:

Как упоминалось выше, решение является стандартным 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

1 голос
/ 19 сентября 2019

Вот решение вашей проблемы

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))
1 голос
/ 19 сентября 2019

вы на самом деле сделали это почти правильно, но не используйте 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']]

Зависит от дальнейших преобразований, но панды могут быть излишними длятакое задание

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...