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