ProgramingTip

Pandas로 가변 수의 열 처리 -Python

bestdevel 2020. 11. 15. 11:36
반응형

Pandas로 가변 수의 열 처리 -Python


다음과 같은 데이터 세트가 있습니다 (최대 5 개 열이지만 더 적을 수 있음).

1,2,3
1,2,3,4
1,2,3,4,5
1,2
1,2,3,4
....

팬더는 read_table을 사용하여 5 열 데이터 프레임으로 수리하려고합니다. 추가 마사지없이 독립하고자합니다.

내가 시도하면

import pandas as pd
my_cols=['A','B','C','D','E']
my_df=pd.read_table(path,sep=',',header=None,names=my_cols)

"열 이름에는 5 개의 필드가 있고 데이터에는 3 개의 필드가 있습니다."라는 오류가 발생합니다.

pandas가 누락 된 열에 데이터를 읽는 동안 NaN을 채우도록하는 방법이 있습니까?


작동하는 것처럼 보이는 한 가지 방법 (최소 0.10.1 및 0.11.0.dev-fc8de6d에서) :

>>> !cat ragged.csv
1,2,3
1,2,3,4
1,2,3,4,5
1,2
1,2,3,4
>>> my_cols = ["A", "B", "C", "D", "E"]
>>> pd.read_csv("ragged.csv", names=my_cols, engine='python')
   A  B   C   D   E
0  1  2   3 NaN NaN
1  1  2   3   4 NaN
2  1  2   3   4   5
3  1  2 NaN NaN NaN
4  1  2   3   4 NaN

그러나이 방법을 사용하려는 원하는 열에 이름을 지정해야합니다. 다른 방법은 일반적이지는 않지만 적용 할 때 충분히 잘 작동합니다.


나는 또한 가능한지 알고 싶습니다. 문서에서 그것은 사실이 아닌 것입니다. 아마도 할 수있는 일은 파일을 한 줄씩 읽고 각 읽기를 DataFrame에 연결하는 것입니다.

import pandas as pd

df = pd.DataFrame()

with open(filepath, 'r') as f:
    for line in f:
        df = pd.concat( [df, pd.DataFrame([tuple(line.strip().split(','))])], ignore_index=True )

작동하지만 가장 우아한 방식은 아닙니다.


확인. 이것이 얼마나 확실한지 확실하지 않지만 여기에 내가 한 일이 있습니다. 이 작업을 수행하는 더 좋은 방법이 있습니다. 감사합니다!

from pandas import DataFrame

list_of_dicts=[]
labels=['A','B','C','D','E']
for line in file:
    line=line.rstrip('\n')
    list_of_dicts.append(dict(zip(labels,line.split(','))))
frame=DataFrame(list_of_dicts)

참고 URL : https://stackoverflow.com/questions/15242746/handling-variable-number-of-columns-with-pandas-python

반응형