code

판다 콘캣은 nan 값을 만들어냅니다.

starcafe 2023. 9. 20. 20:37
반응형

판다 콘캣은 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 값이 도입되지 않았기 때문에 제대로 작동하지 않았습니다.

다른 인덱스 값에 문제가 있다고 생각하는데, 어디에concatget을 정렬할 수 없습니다.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

편집: 다음과 같은 인덱스가 필요한 경우aaaDataFrame의 길이는 동일하게 사용됩니다.

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)

여러 개를 연결하는 방법DataFrames 및 열 이름 유지/회피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

반응형