Как создать фрейм данных с пандами без строки заголовка и сделать первый компонент строки t - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть файл .txt с информацией о разных людях, который выглядит следующим образом:

"fullName": "Markus Graham",
"headline": "CEO ",
"company": "Orange",
"school": "Oxford ",
"location": "England",
(...)
"fullName": "Peter Hallsen",
"headline": "Co-Founder",
"company": "Telecom",
"school": "Cambridge ",
"location": "null",
(...)

Я хочу получить файл .csv с информацией, упорядоченной таким образом:

FullName      |   Headline  |  Company   |  School     | Location
__________________________________________________________________
Markus Graham |   CEO       |  Orange    |  Oxford     |  England
Peter Hallsen |  Co-founder |  Telecom   |  Cambridge  |  null

Я пытался создать фрейм данных в пандах, но получаю следующее:

   Column 1                 |   Column 2         | Column 3 
______________________________________________________________________
"fullName": "Markus Graham" | "headline": "CEO " | "company": "Orange" (...)

Я использовал следующий код:

>> import pandas as pd                                                     
>> df=pd.read_table('text1.txt', sep=',')
>> df.to_excel(r'/Users/username/text1.xlsx')

Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Вы можете прочитать данные, используя read_csv, а затем изменить форму

import io

temp = """
"fullName": "Markus Graham",
"headline": "CEO ",
"company": "Orange",
"school": "Oxford ",
"location": "England",
"fullName": "Peter Hallsen",
"headline": "Co-Founder",
"company": "Telecom",
"school": "Cambridge ",
"location": "null"
"""
df = pd.read_csv(io.StringIO(temp), sep = ':', header = None, names = ['column', 'value'])

df['tmp'] = (df['column']=='fullName').cumsum()

new_df = df.pivot(columns = 'column', index = 'tmp',  values = 'value').reset_index(drop = True).replace('"|,', '', regex = True)

new_df.columns.name = None


    company fullName        headline    location    school
0   Orange  Markus Graham   CEO         England     Oxford
1   Telecom Peter Hallsen   Co-Founder  null        Cambridge
0 голосов
/ 06 февраля 2019

Здесь вы можете использовать регулярное выражение вместе с collections.defaultdict.Это делает пару предположений:

1) Для каждого ключа имеется одинаковое количество значений

2) Ни в одном ключе или значении нет кавычек


Настройка

import pandas as pd
from collections import defaultdict
import re

d = defaultdict(list)

re.findall + pd.DataFrame

with open('test.csv') as infile:
  for line in infile:
    k, v = re.findall(r'\"([^"]+)\"', line)
    d[k].append(v)


df = pd.DataFrame(d)

        fullName    headline  company      school location
0  Markus Graham        CEO    Orange     Oxford   England
1  Peter Hallsen  Co-Founder  Telecom  Cambridge      null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...