판다스 집합 시 작은 구덩이 해결

2980 단어 pandas집합

문제 배경:


이전에 테스트를 잘 하던 프로그램이 갑자기 오류가 발생했는지,merge의 형식 오류가 발생했는지, 이 버그는 좀 이상하다.

문제 분석:


코드: 분류 후 평균값과 방차 계산

tmp_df = df[['object1', 'float']].groupby(['object1']).head(20).groupby(['object1'])['float'].agg(['mean', 'sum']).reset_index()
이 출력은 원래의 데이터 형식입니다. Object 하나,float64 하나입니다.

tmp_df = http_df[['object1', 'object2', 'float']].groupby(['object1', 'object2']).head(20).groupby(['object1', 'object2'])['float'].agg(['mean']).reset_index()
이 출력은object를float로 수정합니다.
차이는 단지 하나의 특징을 이용하여 분류를 하는 것이고, 하나는 두 가지 특징을 이용하여 분류를 하는 것이다

문제의 원인(개인적인 추측, 참고용):


pandas가 분류를 할 때 이전에 각 열의 유형을 정했더라도 안에 데이터가 없을 때 한 열을 사용하여 분류를 할 때 열의 유형을 수정하지 않지만, 두 열을 동시에 사용하여 분류를 하면 열의 유형을 수정합니다.
그래서 뒤에 merge를 진행할 때 유형이 다르고 오류가 발생하는 거예요.
데이터 입력이 있을 때 이 오류는 발생하지 않고 데이터가 없을 때 발생한다.
보충:python 데이터 처리 - 데이터 차이 크기에 따라 분류 (분류)
최근 데이터 처리를 하는 과정에서 데이터 분류 문제에 부딪혔고python의 각종 편리한 라이브러리를 이용하여 데이터 차치의 크기로 분류하는 방법을 썼다.

장면 적용:


예를 들어list=[1,2,3,4,9,10,11,20,20,1,1.1,2.1100]과 같은 데이터 집합이 있는데 이를 수치의 크기에 따라 분류한다. 즉, 수치가 비교적 가까운 것을 분류하기 때문에 먼저 한도값을 설정하여 구분해야 한다.

구체적인 실현은 다음과 같다.


여기서 매개변수 입력Data_set은 입력된 데이터 집합으로 목록, 그룹, 시리즈, DataFrame이 될 수 있습니다.threshold는 데이터 크기로 분류된 문턱 값입니다.
출력 class_k는 데이터 분류 목록 집합, index_list는 데이터 분류에 대응하는 색인 집합입니다.

def threshold_cluster(Data_set,threshold):
 # 
 stand_array=np.asarray(Data_set).ravel('C')
 stand_Data=Series(stand_array)
 index_list,class_k=[],[]
 while stand_Data.any():
  if len(stand_Data)==1:
   index_list.append(list(stand_Data.index))
   class_k.append(list(stand_Data))
   stand_Data=stand_Data.drop(stand_Data.index)
  else:
   class_data_index=stand_Data.index[0]
   class_data=stand_Data[class_data_index]
   stand_Data=stand_Data.drop(class_data_index)
   if (abs(stand_Data-class_data)<=threshold).any():
    args_data=stand_Data[abs(stand_Data-class_data)<=threshold]
    stand_Data=stand_Data.drop(args_data.index)
    index_list.append([class_data_index]+list(args_data.index))
    class_k.append([class_data]+list(args_data))
   else:
    index_list.append([class_data_index])
    class_k.append([class_data])
 return index_list,class_k
테스트는 다음과 같습니다.

import numpy as np 
from pandas import Series,DataFrame 
Data_set=[1,1.1,0.9,-5,2,100,99,-4.2,10000,0] 
index_list,class_k=threshold_cluster(Data_set,5) 
index_list
Out[10]: [[0, 1, 2, 4, 9], [3, 7], [5, 6], [8]] 
class_k
Out[11]: [[1.0, 1.1, 0.9, 2.0, 0.0], [-5.0, -4.2], [100.0, 99.0], [10000.0]]
 
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.만약 잘못이 있거나 완전한 부분을 고려하지 않으신다면 아낌없이 가르침을 주시기 바랍니다.

좋은 웹페이지 즐겨찾기