2017-02-16 5 views
0

Мне нужно загрузить данные из файла с большим количеством столбцов в мой фреймворк данных, и я хочу прочитать их как один непрерывный столбец. Это может показаться странным, но это действительно способ обойти плохое форматирование исходного файла. Исходный файл (назовем его parameter.txt) отформатирован что-то подобное, но гораздо больше:Использование pandas.read_table для чтения в файле как один непрерывный столбец

# parameter 
10 9 8 6 5 3 1 
9 7 6 5 4 2 1 
10 8 6 5 2 1 0 
7 6 5 4 3 2 1 

Я хочу, чтобы это было один столбец Dataframe (или серии), что я могу сцепить с существующим Dataframe. Поэтому, когда я печатаю это, я хочу:

parameter 
10 
9 
8 
6 
5 
3 
1 
9 
7 
6 
5 
4 
2 
1 
10 
8 
6 
5 
2 
1 
0 
7 
6 
5 
4 
3 
2 
1 

Я что-то вроде этого пытается:

import pandas 

existing_df = pd.Dataframe() 

parameter_df = pd.read_table(parameter.txt, header=0, delim_whitespace=True, names=['parameter']) 
existing_df = pd.concat([existing_df, parameter_df], axis=1) 

... но я держу в конечном итоге с целыми строками текста, поскольку каждый элемент в мой последний dataframe, плюс пучок NaNs. Использование squeeze = True тоже не работает. Помогите!

+0

Может 'parameter_df.stack()'? – Psidom

+0

Я не уверен, что я следую. Проблема не в конкатенации. Вы имеете в виду отдельные столбцы загрузки, а затем их укладки? Потому что это не дает порядок, который я хочу, который будет больше похож на штабелированные строки. – Arnold

+0

Вы не читаете фрейм данных правильно, возможно, для вашего текущего кода файл читается как один столбец. Разве вы не хотите, чтобы это было семь столбцов, а затем уложили его в длинный столбец? – Psidom

ответ

0

Если вы откроете свой текстовый файл в виде списка l целых чисел, и они прочитают его как Серию.

f = open('./parameter.txt').read() 
f_list = f.replace('\n', ' ').split(' ') 
l = [int(elem) for elem in f_list if elem != ''] 
parameter_df = pd.DataFrame(pd.Series(l)) 
existing_df = pd.concat([existing_df, parameter_df], axis=1) 

Это то, что вы хотите?

+0

Это слишком интенсивно вычислительно для моих больших файлов. Это продолжалось несколько часов, пока я не остановил его. :/ – Arnold

1

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

parameter_df = pd.read_table("parameter.txt", header=None, delim_whitespace=True, skiprows=1) 

parameter_df.stack().reset_index(drop=True) 

#0  10 
#1  9 
#2  8 
#3  6 
#4  5 
#5  3 
#6  1 
#7  9 
#8  7 
#9  6 
#10  5 
#11  4 
#12  2 
#13  1 
#14 10 
#15  8 
#16  6 
#17  5 
#18  2 
#19  1 
#20  0 
#21  7 
#22  6 
#23  5 
#24  4 
#25  3 
#26  2 
#27  1 
#dtype: int64 
+0

Это не работает так, как вам кажется. Я считаю, что stack() просто поворачивает все, а затем индексы сбрасываются, но результат не является правильной. – Arnold

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