복붙노트

[PYTHON] 판다 연결 : ValueError : 전달 된 값의 형태는 ㅋ, 색인은 blah2를 의미합니다.

PYTHON

판다 연결 : ValueError : 전달 된 값의 형태는 ㅋ, 색인은 blah2를 의미합니다.

나는 (팬더 14.1) 데이터 프레임과 시리즈를 병합하려고합니다. 시리즈는 일부 NAs와 함께 새로운 열을 형성해야합니다 (계열의 인덱스 값은 데이터 프레임의 인덱스 값의 서브 세트이므로).

이것은 장난감 예제에 대해서는 작동하지만 내 데이터에는 적용되지 않습니다 (아래에 설명 됨).

예:

import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.randn(6, 4), columns=['A', 'B', 'C', 'D'], index=pd.date_range('1/1/2011', periods=6, freq='D'))
df1

A   B   C   D
2011-01-01  -0.487926   0.439190    0.194810    0.333896
2011-01-02  1.708024    0.237587    -0.958100   1.418285
2011-01-03  -1.228805   1.266068    -1.755050   -1.476395
2011-01-04  -0.554705   1.342504    0.245934    0.955521
2011-01-05  -0.351260   -0.798270   0.820535    -0.597322
2011-01-06  0.132924    0.501027    -1.139487   1.107873

s1 = pd.Series(np.random.randn(3), name='foo', index=pd.date_range('1/1/2011', periods=3, freq='2D'))
s1

2011-01-01   -1.660578
2011-01-03   -0.209688
2011-01-05    0.546146
Freq: 2D, Name: foo, dtype: float64

pd.concat([df1, s1],axis=1)

A   B   C   D   foo
2011-01-01  -0.487926   0.439190    0.194810    0.333896    -1.660578
2011-01-02  1.708024    0.237587    -0.958100   1.418285    NaN
2011-01-03  -1.228805   1.266068    -1.755050   -1.476395   -0.209688
2011-01-04  -0.554705   1.342504    0.245934    0.955521    NaN
2011-01-05  -0.351260   -0.798270   0.820535    -0.597322   0.546146
2011-01-06  0.132924    0.501027    -1.139487   1.107873    NaN

데이터 (아래 참조)의 상황은 기본적으로 동일합니다. DatetimeIndex와 시리즈를 연결하면 그 값은 데이터 프레임의 하위 집합입니다. 그러나 제목에 ValueError를 제공합니다 (blah1 = (5, 286) blah2 = (5, 276)). 왜 작동하지 않습니까? :

In[187]: df.head()
Out[188]:
high    low loc_h   loc_l
time                
2014-01-01 17:00:00 1.376235    1.375945    1.376235    1.375945
2014-01-01 17:01:00 1.376005    1.375775    NaN NaN
2014-01-01 17:02:00 1.375795    1.375445    NaN 1.375445
2014-01-01 17:03:00 1.375625    1.375515    NaN NaN
2014-01-01 17:04:00 1.375585    1.375585    NaN NaN
In [186]: df.index
Out[186]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-01-01 17:00:00, ..., 2014-01-01 21:30:00]
Length: 271, Freq: None, Timezone: None

In [189]: hl.head()
Out[189]:
2014-01-01 17:00:00    1.376090
2014-01-01 17:02:00    1.375445
2014-01-01 17:05:00    1.376195
2014-01-01 17:10:00    1.375385
2014-01-01 17:12:00    1.376115
dtype: float64

In [187]:hl.index
Out[187]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-01-01 17:00:00, ..., 2014-01-01 21:30:00]
Length: 89, Freq: None, Timezone: None

In: pd.concat([df, hl], axis=1)
Out: [stack trace] ValueError: Shape of passed values is (5, 286), indices imply (5, 276)

해결법

  1. ==============================

    1.비슷한 문제가 있었지만 (연계 작업은했지만 연계 작업은 실패했습니다)

    비슷한 문제가 있었지만 (연계 작업은했지만 연계 작업은 실패했습니다)

    df1 및 s1에 중복 색인 값이 있는지 확인하십시오 (예 : df1.index.is_unique).

    중복 색인 값 (예 : df.drop_duplicates (inplace = True))을 삭제하거나 여기에서 https://stackoverflow.com/a/34297689/7163376의 메소드 중 하나를 해결해야합니다.

  2. ==============================

    2.내 문제가 어디 다른 색인, 다음 코드는 내 문제를 해결.

    내 문제가 어디 다른 색인, 다음 코드는 내 문제를 해결.

    df1.reset_index(drop=True, inplace=True)
    df2.reset_index(drop=True, inplace=True)
    df = pd.concat([df1, df2], axis=1)
    
  3. ==============================

    3.Aus_lacy의 게시물은 나에게 관련 메소드 시도에 대한 아이디어를주었습니다.

    Aus_lacy의 게시물은 나에게 관련 메소드 시도에 대한 아이디어를주었습니다.

    In [196]:
    
    hl.name = 'hl'
    Out[196]:
    'hl'
    In [199]:
    
    df.join(hl).head(4)
    Out[199]:
    high    low loc_h   loc_l   hl
    2014-01-01 17:00:00 1.376235    1.375945    1.376235    1.375945    1.376090
    2014-01-01 17:01:00 1.376005    1.375775    NaN NaN NaN
    2014-01-01 17:02:00 1.375795    1.375445    NaN 1.375445    1.375445
    2014-01-01 17:03:00 1.375625    1.375515    NaN NaN NaN
    

    concat이 예제에서 작동하지만이 데이터가 아닌 이유에 대한 통찰력은 좋을 것입니다!

  4. ==============================

    4.색인에 중복 값이 ​​포함되어있을 수 있습니다.

    색인에 중복 값이 ​​포함되어있을 수 있습니다.

    import pandas as pd
    
    T1_INDEX = [
        0,
        1,  # <= !!! if I write e.g.: "0" here then it fails
        0.2,
    ]
    T1_COLUMNS = [
        'A', 'B', 'C', 'D'
    ]
    T1 = [
        [1.0, 1.1, 1.2, 1.3],
        [2.0, 2.1, 2.2, 2.3],
        [3.0, 3.1, 3.2, 3.3],
    ]
    
    T2_INDEX = [
        1.2,
        2.11,
    ]
    
    T2_COLUMNS = [
        'D', 'E', 'F',
    ]
    T2 = [
        [54.0, 5324.1, 3234.2],
        [55.0, 14.5324, 2324.2],
        # [3.0, 3.1, 3.2],
    ]
    df1 = pd.DataFrame(T1, columns=T1_COLUMNS, index=T1_INDEX)
    df2 = pd.DataFrame(T2, columns=T2_COLUMNS, index=T2_INDEX)
    
    
    print(pd.concat([pd.DataFrame({})] + [df2, df1], axis=1))
    
  5. ==============================

    5.색인을 연결 한 후 정렬을 시도하십시오.

    색인을 연결 한 후 정렬을 시도하십시오.

    result=pd.concat([df1,df2]).sort_index()
    
  6. from https://stackoverflow.com/questions/27719407/pandas-concat-valueerror-shape-of-passed-values-is-blah-indices-imply-blah2 by cc-by-sa and MIT license