팬더 콘캣: 가치 오류:전달된 값의 모양은 blah이고 인덱스는 blah2를 의미합니다.
(판다스 14.1) 데이터 프레임과 시리즈를 병합하려고 합니다.영상 시리즈는 일부 NA(영상 시리즈의 인덱스 값이 데이터 프레임의 인덱스 값의 하위 집합이므로)와 함께 새 열을 형성해야 합니다.
이것은 장난감 예제에서는 작동하지만 내 데이터(아래 자세히 설명)에서는 작동하지 않습니다.
예:
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
데이터의 상황(아래 참조)은 기본적으로 동일한 것으로 보입니다. 즉, Datetime을 사용하여 시리즈를 연결합니다.값이 데이터 프레임의 하위 집합인 인덱스입니다.그러나 제목(blah1 = (5,286) blah2 = (5,276)에 ValueError가 표시됩니다.작동하지 않는 이유:
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)
저도 비슷한 문제가 있었습니다.join
효과는 있었지만,concat
실패).
에서 값 df1
그리고.s1
(예:)df1.index.is_unique
)
된 인덱스 값( 중인스값예제거덱복예(:▁(제거) :df.drop_duplicates(inplace=True)
) 또는 여기에 있는 방법 중 하나인 https://stackoverflow.com/a/34297689/7163376 에서 해결해야 합니다.
나의 문제는 다른 인덱스였고, 다음 코드는 나의 문제를 해결했습니다.
df1.reset_index(drop=True, inplace=True)
df2.reset_index(drop=True, inplace=True)
df = pd.concat([df1, df2], axis=1)
인덱스를 하려면 , 「 」 「 」 「 」를 합니다.
df = df.loc[df.index.drop_duplicates()]
C.f. pandas.pydata.org/pandas-docs/stable/generated/ … – 볼펜벤 4월 18일 15:25
이것은 잘못된 것이지만 저는 볼펜벤의 평이 낮아서 직접 답변을 드릴 수 없습니다.는 그이잘이유는된 때문입니다.df.index.drop_duplicates()
고유 인덱스 목록을 반환하지만 이러한 고유 인덱스를 사용하여 데이터 프레임으로 다시 인덱싱해도 모든 레코드가 반환됩니다.중복된 인덱스 중 하나를 사용한 인덱싱은 인덱스의 모든 인스턴스를 반환하기 때문에 가능하다고 생각합니다.
대신에, 신대사를 하세요.df.index.duplicated()
경우 목록을 합니다(" " " " " " " " (" " " " " 을 합니다).~
복제되지 않은 레코드 가져오기):
df = df.loc[~df.index.duplicated()]
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
콘캣이 예제에서는 작동하지만 이 데이터에서는 작동하지 않는 이유에 대한 몇 가지 통찰력은 좋을 것입니다!
인덱스에 중복된 값이 포함되어 있을 수 있습니다.
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))
인덱스를 연결한 후 정렬 시도
result=pd.concat([df1,df2]).sort_index()
간단한 방법일 수도 있습니다. 데이터 프레임이 있는 경우 이 방법을 사용해 보십시오.그런 다음 결합하려는 행렬 또는 벡터가 모두 동일한 rows_name/index인지 확인합니다.
저도 같은 문제가 있었습니다.행의 이름 인덱스를 서로 일치하도록 변경했습니다. 여기서는 행렬(주성분)과 벡터(대상)의 행 인덱스가 동일한 예입니다(그림 왼쪽의 파란색으로 동그라미 표시했습니다).
이전에 "작동하지 않을 때"에는 일반 행 인덱스(0,1,2,3)를 사용하는 행렬을 사용하고 행 인덱스(ID0,ID1,ID2,ID3)를 사용하는 벡터를 사용한 다음 벡터의 행 인덱스를 (0,1,2,3)로 변경하여 사용했습니다.
언급URL : https://stackoverflow.com/questions/27719407/pandas-concat-valueerror-shape-of-passed-values-is-blah-indices-imply-blah2
'programing' 카테고리의 다른 글
자녀가 Angular 2에서 부모 이벤트를 수신합니다. (0) | 2023.07.31 |
---|---|
Android: 선형 레이아웃에 테두리를 그리는 방법 (0) | 2023.07.31 |
가장 자주 나타나는 값을 선택하는 방법은 무엇입니까? (0) | 2023.07.31 |
구성 파일을 통해 WCF 웹 서비스 참조 URL 경로를 동적으로 전환합니다. (0) | 2023.07.31 |
HTML에서 한 이미지를 다른 이미지 위에 어떻게 배치합니까? (0) | 2023.07.31 |