>source

70 개의 열이있는 데이터 프레임 df가 있습니다. 축 = 1을 따라 df.quantile () 함수를 사용하여 분위수를 계산하려고합니다. 다음은 데이터 프레임에 대한 세부 정보입니다.

> print(df.head(4))

                     WS_653         WS_654        WS_655       WS_658  \
ts                                                                            
2020-11-01 01:00:00       12.3708       11.7133       12.2125       12.3325   
2020-11-01 01:10:00       12.6442       12.1883       12.5625       12.3233   
2020-11-01 01:20:00       12.8042       11.7109       11.8765       12.1134   
2020-11-01 01:30:00       12.3176       10.6824       11.8361       11.5672   
                          WS_656         WS_657       WS_664        WS_659  \
ts                                                                            
2020-11-01 01:00:00       12.0217       11.6233       12.6108       12.2458   
2020-11-01 01:10:00       13.0342       12.5917       12.5225       11.7658   
2020-11-01 01:20:00       11.6042       10.6496       11.8874       12.3613   
2020-11-01 01:30:00       11.3118       9.98403          10.6       10.5992   
                          WS_663         WS_666  ...       WS_715  \
ts                                               ...                 
2020-11-01 01:00:00       15.3058       15.1433  ...       12.9008   
2020-11-01 01:10:00       15.3283       15.0625  ...       12.6042   
2020-11-01 01:20:00       15.3765        15.058  ...       11.7462   
2020-11-01 01:30:00       14.7689       14.4992  ...       11.0294   
[4 rows x 70 columns]

> q10 = df.quantile(0.1, axis = 1)
> print(q10)

ts
2020-11-01 01:00:00   NaN
2020-11-01 01:10:00   NaN
2020-11-01 01:20:00   NaN
2020-11-01 01:30:00   NaN
2020-11-01 01:40:00   NaN
                       ..
2020-12-01 00:00:00   NaN
2020-12-01 00:10:00   NaN
2020-12-01 00:20:00   NaN
2020-12-01 00:30:00   NaN
2020-12-01 00:40:00   NaN
Name: 0.1, Length: 4319, dtype: float64

그러나 다음과 같이 반복하면

> q10 = list()
> for k in range(len(df)):
       q10.append(df.iloc[k,:].quantile(0.1))
> print(q10)

각 행에 해당하는 정확한 Quantile 값으로 len (df) 크기 목록을 인쇄합니다. 따라서 동일한 df에서 행 단위로 작동하지만 전체 데이터 프레임에서 작동하지 않는 이유를 이해하고 싶습니다.


  • 답변 # 1

    그렇지 않은 열이 있습니다. float 데이터 유형.

    데이터 유형이 'float64'인 열에 대해서만 인덱싱 할 수 있습니다.

    cols  = [col for col in df.columns if df[col].dtype == 'float64']
    df[cols].astype(float).quantile(0.1, axis = 1)
    
    

    샘플 출력 (질문에 4 개 행의 두 번째 세트) :

    ts
    2020-11-01 01:00:00    11.74282
    2020-11-01 01:10:00    11.99281
    2020-11-01 01:20:00    10.93598
    2020-11-01 01:30:00   10.168581
    Name: 0.1, dtype: float64
    
    

    또는 개체 열을 변경할 수 있습니다 (dtype 'O' ) 함께 수레 pd.to_numeric() . 모든 열을 부동으로 강제하고 반환하기 때문에 결과가 달라집니다. NaN 문자열 인 모든 값 :

    cols  = [col for col in df.columns if df[col].dtype == 'O']
    for col in cols:
        df[col] = pd.to_numeric(df[col], errors='coerce')
    df.quantile(0.1, axis = 1)
    
    

  • 이전 스칼라의 데코레이터 패턴
  • 다음 python - 날짜 열 Django로 평균하고 싶습니까?