Python преобразовать разделенный запятыми список в pandas dataframe

Я изо всех сил пытаюсь преобразовать список, разделенный запятыми, в фрейм данных с несколькими столбцами (7).

print (type(mylist))

<type 'list'>
Print(mylist)


['AN,2__AAS000,26,20150826113000,-283.000,20150826120000,-283.000',         'AN,2__AE000,26,20150826113000,0.000,20150826120000,0.000',.........

следующее создает кадр из одного столбца:

df = pd.DataFrame(mylist)

Я рассмотрел встроенную функциональность csv для панд, однако мои данные csv хранятся в списке. Как я могу просто скрыть список в фрейм данных 7 столбцов.

спасибо заранее.

2 ответов


вам нужно разделить каждую строку в вашем списке:

import  pandas as pd

df = pd.DataFrame([sub.split(",") for sub in l])
print(df)

выход:

   0         1   2               3         4               5         6
0  AN  2__AS000  26  20150826113000  -283.000  20150826120000  -283.000
1  AN   2__A000  26  20150826113000     0.000  20150826120000     0.000
2  AN  2__AE000  26  20150826113000  -269.000  20150826120000  -269.000
3  AN  2__AE000  26  20150826113000  -255.000  20150826120000  -255.000
4  AN   2__AE00  26  20150826113000  -254.000  20150826120000  -254.000

если вы знаете, сколько строк пропустить в csv, вы можете сделать все это с помощью read_csv, используя skiprows=lines_of_metadata:

import  pandas as pd

df = pd.read_csv("in.csv",skiprows=3,header=None)
print(df)

или если каждая строка метаданные начинается с определенного символа вы можете использовать комментарий:

df = pd.read_csv("in.csv",header=None,comment="#")  

Если вам нужно указать более одного символа, вы можете объединить itertools.takewhile который будет отбрасывать строки, начинающиеся с xxx:

import pandas as pd
from itertools import dropwhile
import csv
with open("in.csv") as f:
    f = dropwhile(lambda x: x.startswith("#!!"), f)
    r = csv.reader(f)
    df = pd.DataFrame().from_records(r)

использование входных данных добавление некоторых строк, начиная с #!!:

#!! various
#!! metadata
#!! lines
AN,2__AS000,26,20150826113000,-283.000,20150826120000,-283.000
AN,2__A000,26,20150826113000,0.000,20150826120000,0.000
AN,2__AE000,26,20150826113000,-269.000,20150826120000,-269.000
AN,2__AE000,26,20150826113000,-255.000,20150826120000,-255.000
AN,2__AE00,26,20150826113000,-254.000,20150826120000,-254.000

выходы:

    0         1   2               3         4               5         6
0  AN  2__AS000  26  20150826113000  -283.000  20150826120000  -283.000
1  AN   2__A000  26  20150826113000     0.000  20150826120000     0.000
2  AN  2__AE000  26  20150826113000  -269.000  20150826120000  -269.000
3  AN  2__AE000  26  20150826113000  -255.000  20150826120000  -255.000
4  AN   2__AE00  26  20150826113000  -254.000  20150826120000  -254.000

я сталкиваюсь с подобной проблемой. Я решаю ее таким образом.

def lrsplit(line):
    left, *_ , right = line.split('-')
    mid = '-'.join(_)
    return left, mid, right.strip()
example = pd.DataFrame(lrsplit(line) for line in open("example.csv"))
example.columns = ['location', 'position', 'company']

результат:

    location    position    company
0   india   manager intel
1   india   sales-manager   amazon
2   banglore    ccm- head - county  jp morgan