2016-02-06 2 views
1

я данные в исходном файле в форматеDataframe колонка транспонировать в панд

Open,0.001 
High,0.001 
Low,0.001 
Close,0.001 
Volume,0 
Adj Close,0.001 
SMA_20,0.0010000000000000005 
SMA_50,0.0010000000000000007 
date_of_trade,2016-02-05 00:00:00 
code,AFT 
Open,2.9300000000000002 
High,2.9700000000000002 
Low,2.8300000000000001 
Close,2.8999999999999999 
Volume,631100 
Adj Close,2.8999999999999999 
SMA_20,3.2214999999999998 
SMA_50,3.0767999999999969 
date_of_trade,2016-02-05 00:00:00 
code,1PG 
Open,6.9900000000000002 
High,7.0999999999999996 
Low,6.9000000000000004 
Close,6.9000000000000004 
Volume,4300 

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

open,high,low,close,volume,adj_close,sma_20,sma_50,data_of_trade,code 
.001,.001,.001,0,.001,.0001000005,.0000100007,2016-02-05 00:00:00,aft 
2.93,2.97,.......................................................,1pg 

первый столбец в исходном файле является имя столбца и второй является соответствующее значение столбца.

Я попытался свернуть и т. Д., Но не смог заставить его работать. Помощь может быть рада приветствовать.

+1

У меня возникли проблемы с пониманием желаемого результата. Вы хотите сначала просмотреть все имена столбцов, а затем все значения столбцов (упорядоченные по именам столбцов)? –

+0

yes u r correct.i хотите поместить имя столбца в первую строку, за которым следует значение данных в каждой строке. PLS см. формат, который я упоминаю в q – NewtoPython

+0

Строка 1: Open, High, Low и т. д. Row2: 0.01 и т. д.? Что-то вроде этого? Где порядок строк2 зависит от порядка строки1? Кроме того, в чем вопрос, вы хотите, чтобы код сделал это или что именно? –

ответ

3

для pivot чтобы работать должным образом, то вам нужно добавить уникальный идентификатор для каждой записи, например, если одна запись длиной 10 строк в исходных данных, то целочисленное деление числа строк на 10 бы:

df = pd.read_csv(data, header=None, names=["key", "value"]) 
df["index"] = [i // 10 for i in range(len(df))] 
df = df.pivot("index", "key", "value") 

FTR: если у вас есть более чем, скажем, несколько миллиардов записей (> бесплатно ГБ ваша оперативная память), затем используйте http://pandas.pydata.org/pandas-docs/stable/io.html#io-chunking

+0

Я действительно люблю ваше решение, это приятно и минималистично. – Kris

+0

@Aprillion Этот код не работал. Спасибо anycon – NewtoPython

+0

и какое сообщение об ошибке вы получаете? – Aprillion

1

Я не думаю, что вам действительно нужна машина Pandas. Вы можете просто сделать перестановку вручную:

from csv import DictWriter 
from toolz import partition 

cols = 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close', 'SMA_20', 'SMA_50', 'date_of_trade', 'code' 

with open('old.csv') as old, open('new.csv', 'w') as new: 
    writer = DictWriter(new, cols) 
    writer.writeheader() 

    for lines in partition(len(cols), old): 
     writer.writerow(dict(l.strip().split(',') for l in lines)) 
+0

OP не хочет конвертировать 2 столбца в 2 строки, а во многие строки - новая запись начинается каждые 10 строк на входе – Aprillion

+0

yes ur right first column содержать имя столбца второй столбец содержат значения. набор из 10 повторяется. – NewtoPython

+0

А я вижу .. хорошо – Kris

Смежные вопросы