2013-11-07 3 views
1

Это мой (сокращенный) текстовый файл (форматирование могут быть потеряны в почте):Преобразование списка в столбцы в Python

date close volume   open high low 
12:21 82.94 "14,748,136" 83.37 83.4 82.73 

Когда я прочитал .txt файл в Python становится список, который я затем раскол. Как я возьму список и переупорядочу в векторы столбцов? Любая помощь приветствуется.

+0

У меня пари, у панд есть какая-то утилита для этого, http://pandas.pydata.org/pandas-docs/stable/index.html – dm03514

+0

Вы должны установить отображаемое имя в своем профиле, а не включать signoff в ваших сообщениях: http://stackoverflow.com/users/edit/2593632 –

+1

Похоже, что каждый ответ сделал другое предположение о том, в какой части этого у вас возникают проблемы, и как ваши данные обобщаются. Это означает, что вам, вероятно, нужно прочитать ответы и предоставить достаточно кода, данных и объяснений, чтобы устранить догадки. – abarnert

ответ

4

, если у вас есть список строк, и вы просто хотите, чтобы изменить его в список столбцов, вы можете просто сделать

transposed_list = zip(*original_list_of_rows) 

, но его не ясно, если у вас есть список строк

0

Предположительно , учитывая, что у вас есть котировки вокруг хотя бы одного из значений, возможно, что пробелы будут отображаться внутри значения. Таким образом, вы не можете просто split().

Вы можете разобрать его как фанк диалекте CSV, где разделителем является пробел, а начальный пробел пропущен:

with open('textfile') as f: 
    rows = list(csv.reader(f, delimiter=' ', skipinitialspace=True) 

Это будет автоматически обрабатывать цитаты для вас и все.

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

date close volume   open high low 
12:21 82.94 "14,748,136" 83.37 83.4 82.73 
12:22 93213.12"15,222,139" 93201.1493333.3390213.94 

Если да, то вы можете только разобрать его, нарезая линии в соответствующих полях столбца. Если вам повезет, вы можете использовать заголовки для этого; в противном случае вам нужно будет указать их вручную. Я предполагаю, что вы не повезло, так:

columns = 0, 7, 15, 31, 39, 47, None 
def columnize(line): 
    return [line[columns[i]:columns[i+1]].rstrip() for i in range(len(columns)-1)] 
with open('textfile') as f: 
    rows = map(columnize, f) 
+0

искреннее спасибо. –

+0

есть хорошая книга/ресурс, объясняющий этот аспект программирования на питоне? –

+0

Python для анализа данных Wes Mckinney http://shop.oreilly.com/product/0636920023784.do – dartdog

0
[[x for i,x in enumerate(text.split()) if (i+j)%colNumber==0 ] 
for j in range(colNumber)] 

это требует, чтобы вы уже знаете номер столбца и текстовый файл formmated в виде таблицы. , например:

text='''a b c 
1 2 4 
1 2 4 
1 2 4 
''' 

colNumber=3 
table=[[x for i,x in enumerate(text.split()) if (i+j)%colNumber==0 ] 
for j in range(colNumber)] 

print(table) 

результат:

[['a', '1', '1', '1'], ['c', '4', '4', '4'], ['b', '2', '2', '2']] 
+0

@ user2593632 Эй, если вы думаете, что кто-то решил вашу проблему, не забудьте проголосовать за его ответ или установить его как принятый. – tcpiper

+0

им новый, так что к сожалению у меня пока нет этой привилегии. –

+0

@ChaseCB: Да. Вы не можете продвигать любые полезные ответы, пока не получите больше отзывов, но каждый, кто может задать вопрос, может принять единственный ответ на этот вопрос. (И если вы не научитесь это делать, вы, вероятно, никогда не получите репутацию, вам нужно что-нибудь сделать.) – abarnert

0

Вы можете использовать панд dataframes. (Надеюсь, это файл с разделителями вкладок)

import pandas as pd 
import numpy as np 
import csv 


df = pd.read_csv('text.txt', sep='\t', header=None) 
print df 

Затем вы можете переименовать столбцы.

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