반응형
판다 콘캣은 nan 값을 만들어냅니다.
팬더에서 두 개의 데이터 프레임을 단순하게 연결하는 이유가 궁금합니다.
initId.shape # (66441, 1)
initId.isnull().sum() # 0
ypred.shape # (66441, 1)
ypred.isnull().sum() # 0
NaN 값이 없는 동일한 모양 및 둘 다의
foo = pd.concat([initId, ypred], join='outer', axis=1)
foo.shape # (83384, 2)
foo.isnull().sum() # 16943
가입할 경우 NaN 값이 많이 나올 수 있습니다.
이 문제를 해결하고 NaN 값이 도입되지 않도록 하려면 어떻게 해야 합니까?그것을 재현하려고 노력하는 것처럼.
aaa = pd.DataFrame([0,1,0,1,0,0], columns=['prediction'])
bbb = pd.DataFrame([0,0,1,0,1,1], columns=['groundTruth'])
pd.concat([aaa, bbb], axis=1)
예를 들어 NaN 값이 도입되지 않았기 때문에 제대로 작동하지 않았습니다.
다른 인덱스 값에 문제가 있다고 생각하는데, 어디에concat
get을 정렬할 수 없습니다.NaN
:
aaa = pd.DataFrame([0,1,0,1,0,0], columns=['prediction'], index=[4,5,8,7,10,12])
print(aaa)
prediction
4 0
5 1
8 0
7 1
10 0
12 0
bbb = pd.DataFrame([0,0,1,0,1,1], columns=['groundTruth'])
print(bbb)
groundTruth
0 0
1 0
2 1
3 0
4 1
5 1
print (pd.concat([aaa, bbb], axis=1))
prediction groundTruth
0 NaN 0.0
1 NaN 0.0
2 NaN 1.0
3 NaN 0.0
4 0.0 1.0
5 1.0 1.0
7 1.0 NaN
8 0.0 NaN
10 0.0 NaN
12 0.0 NaN
인덱스 값이 필요 없는 경우 해결 방법은 다음과 같습니다.
aaa.reset_index(drop=True, inplace=True)
bbb.reset_index(drop=True, inplace=True)
print(aaa)
prediction
0 0
1 1
2 0
3 1
4 0
5 0
print(bbb)
groundTruth
0 0
1 0
2 1
3 0
4 1
5 1
print (pd.concat([aaa, bbb], axis=1))
prediction groundTruth
0 0 0
1 1 0
2 0 1
3 1 0
4 0 1
5 0 1
편집: 다음과 같은 인덱스가 필요한 경우aaa
DataFrame의 길이는 동일하게 사용됩니다.
bbb.index = aaa.index
print (pd.concat([aaa, bbb], axis=1))
prediction groundTruth
4 0 0
5 1 0
8 0 1
7 1 0
10 0 1
12 0 1
다음과 같은 작업을 수행할 수 있습니다.
concatenated_dataframes = concat(
[
dataframe_1.reset_index(drop=True),
dataframe_2.reset_index(drop=True),
dataframe_3.reset_index(drop=True)
],
axis=1,
ignore_index=True,
)
concatenated_dataframes_columns = [
list(dataframe_1.columns),
list(dataframe_2.columns),
list(dataframe_3.columns)
]
flatten = lambda nested_lists: [item for sublist in nested_lists for item in sublist]
concatenated_dataframes.columns = flatten(concatenated_dataframes_columns)
여러 개를 연결하는 방법DataFrame
s 및 열 이름 유지/회피NaN
.
jezrail이 지적한 바와 같이, 이는 다른 인덱스 레이블 때문입니다.concat
인덱스에 일치하므로 동일하지 않으면 이 문제가 발생합니다.간단한 수평 연결의 경우 인덱스 레이블이 동일하도록 "강요"해야 합니다.편도는 경유입니다.set_axis
방법.따라서 두 번째 데이터 프레임 인덱스는 첫 번째 데이터 프레임 인덱스와 동일합니다.
joined_df = pd.concat([df1, df2.set_axis(df1.index)], axis=1)
또는 두 프레임의 인덱스를 재설정하기만 하면 됩니다.
joined_df = pd.concat([df1.reset_index(drop=True), df2.reset_index(drop=True)], axis=1)
언급URL : https://stackoverflow.com/questions/40339886/pandas-concat-generates-nan-values
반응형
'code' 카테고리의 다른 글
Pandas Dataframe에서 빈 항목 또는 NaN 항목 찾기 (0) | 2023.09.20 |
---|---|
Oracle: 여러 열에 대한 빠른 NOT IN (0) | 2023.09.20 |
https://index.docker.io 에 연결하는 동안 네트워크 시간 초과됨 (0) | 2023.09.20 |
창을 사용하여 파일을 다운로드하려면 어떻게 해야 합니까?가져오라고요? (0) | 2023.09.20 |
오라클 datetime 필드 색인 (0) | 2023.09.20 |