반응형
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
반응형
'ProgramingTip' 카테고리의 다른 글
모바일 장치의 Twitter 부트 신뢰할 수있는 모달 (0) | 2020.11.15 |
---|---|
Swagger API 선언에서 JSON-Schema를 생성하는 방법 (0) | 2020.11.15 |
Go에서 분할을 수행하는 방법 (0) | 2020.11.15 |
Func의 차이점은 무엇입니까 (0) | 2020.11.15 |
varchar (MAX)가 항상 선호하는 검사? (0) | 2020.11.15 |