2017-02-16 1 views
0

많은 열이있는 파일의 데이터를 내 데이터 프레임으로로드해야하며 하나의 연속 열로 읽어야합니다. 이것은 이상하게 들릴지 모르지만 실제로는 원본 파일의 잘못된 형식을 피하는 방법입니다. 나는 이것이 내가 기존 Dataframe와 연결할 수있는 하나의 열 Dataframe (또는 시리즈)가되고 싶어요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 

: 원본 파일 (의이 parameter.txt를 부르 자)이 같은 있지만 훨씬 더 큰 포맷됩니다. 나는이 같은 노력했습니다

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) 

을 ...하지만 난 내 마지막의 각 요소와 텍스트의 전체 행이 끝나는 유지 데이터 프레임, 다수의 NaN. squeeze = True를 사용할 때도 작동하지 않습니다. 도움!

+0

어쩌면'parameter_df.stack()': 그것은 긴 형식, 단일 행에 데이터 프레임을 변환하는 stack를 사용에서 파일을 읽을 무관 후에 경우 첫 번째 행을 건너 뛸 수 있습니다? – Psidom

+0

나는 잘 모르겠다. 문제는 연결이 아닙니다. 개별 로딩 컬럼을 말하고 나서 쌓아 올리는 것을 의미합니까? 그게 내가 쌓아 놓은 줄처럼 더 좋을 주문을주지 않기 때문입니다. – Arnold

+0

데이터 프레임을 제대로 읽지 못하고 있습니다. 현재 코드에서 파일은 하나의 열로 읽혀집니다. 7 열로 만들고 긴 열로 쌓아 두지 않으시겠습니까? – 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으로 매개 변수를 올바르게 설정해야합니다.

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