Python Panda는 한 열의 NaN을 두 번째 열의 해당 행 값으로 바꿉니다.
저는 Python의 Pandas DataFrame과 함께 일하고 있습니다.
File heat Farheit Temp_Rating
1 YesQ 75 N/A
1 NoR 115 N/A
1 YesA 63 N/A
1 NoT 83 41
1 NoY 100 80
1 YesZ 56 12
2 YesQ 111 N/A
2 NoR 60 N/A
2 YesA 19 N/A
2 NoT 106 77
2 NoY 45 21
2 YesZ 40 54
3 YesQ 84 N/A
3 NoR 67 N/A
3 YesA 94 N/A
3 NoT 68 39
3 NoY 63 46
3 YesZ 34 81
모든 NaN을 교체해야 합니다.Temp_Rating의 값이 있는 열Farheit기둥.
이것이 제가 필요로 하는 것입니다.
File heat Temp_Rating
1 YesQ 75
1 NoR 115
1 YesA 63
1 YesQ 41
1 NoR 80
1 YesA 12
2 YesQ 111
2 NoR 60
2 YesA 19
2 NoT 77
2 NoY 21
2 YesZ 54
3 YesQ 84
3 NoR 67
3 YesA 94
3 NoT 39
3 NoY 46
3 YesZ 81
부울 선택을 수행하면 한 번에 이 열 중 하나만 선택할 수 있습니다.문제는 만약 제가 그들과 함께 하려고 한다면, 저는 올바른 질서를 유지하면서 이것을 할 수 없다는 것입니다.
어떻게 해야만 찾을 수 있습니까?Temp_Rating와의 말다툼.NaNs 및 그 값들을 같은 행의 값으로 대체합니다.Farheit칼럼?
데이터 프레임이 다음 위치에 있다고 가정합니다.df:
df.Temp_Rating.fillna(df.Farheit, inplace=True)
del df['Farheit']
df.columns = 'File heat Observations'.split()
먼저 모든 항목 교체NaN해당 값을 갖는 값df.Farheit삭제'Farheit'기둥.그런 다음 열 이름을 바꿉니다.결과는 다음과 같습니다.DataFrame:

위에서 언급한 해결책은 저에게 효과가 없었습니다.제가 사용한 방법은 다음과 같습니다.
df.loc[df['foo'].isnull(),'foo'] = df['bar']
@조나단의 대답은 좋지만, 과잉 살상은 그냥 사용하세요.pop:
df['Temp_Rating'] = df['Temp_Rating'].fillna(df.pop('Farheit'))
이 문제를 해결하기 위한 또 다른 방법은,
import pandas as pd
import numpy as np
ts_df = pd.DataFrame([[1,"YesQ",75,],[1,"NoR",115,],[1,"NoT",63,13],[2,"YesT",43,71]],columns=['File','heat','Farheit','Temp'])
def fx(x):
if np.isnan(x['Temp']):
return x['Farheit']
else:
return x['Temp']
print(1,ts_df)
ts_df['Temp']=ts_df.apply(lambda x : fx(x),axis=1)
print(2,ts_df)
반환:
(1, File heat Farheit Temp
0 1 YesQ 75 NaN
1 1 NoR 115 NaN
2 1 NoT 63 13.0
3 2 YesT 43 71.0)
(2, File heat Farheit Temp
0 1 YesQ 75 75.0
1 1 NoR 115 115.0
2 1 NoT 63 13.0
3 2 YesT 43 71.0)
다음과 같은 경우 값을 대체하는 를 사용할 수도 있습니다.Temp_Rating열에 의한 NaN임Farheit:
df['Temp_Rating'] = df['Temp_Rating'].mask(df['Temp_Rating'].isna(), df['Farheit'])
승인된 답변은 다음을 사용합니다.fillna()두 데이터 프레임이 인덱스를 공유하는 결측값을 채웁니다.여기서 잘 설명했듯이, 당신은 다음을 사용할 수 있습니다.combine_first두 데이터 프레임의 인덱스가 일치하지 않는 상황에 대한 결측값, 행 및 인덱스 값을 입력합니다.
df.Col1 = df.Col1.fillna(df.Col2) #fill in missing values if indices match
#or
df.Col1 = df.Col1.combine_first(df.Col2) #fill in values, rows, and indices
매우 늦게 왔지만, 비슷한 문제를 발견했고 이렇게 해결했습니다. 저에게는 조금 더 간결하게 보였습니다.비슷한 상황에 있는 모든 사람들에게 효과가 있기를 바랍니다.
def function_a (row):
if row['Temp_Rating'] is None :
val = print(row['Farheit'])
return val
df['Temp_Rating'] = df.apply(function_a, axis=1)
df1= df.drop([Farheit], axis=1)
언급URL : https://stackoverflow.com/questions/29177498/python-pandas-replace-nan-in-one-column-with-value-from-corresponding-row-of-sec
'programing' 카테고리의 다른 글
| Angular 2의 JSON 파이프가 작동하지 않습니다. (0) | 2023.06.18 |
|---|---|
| cocoapods 버전 1.0.0.beta.1에 오류가 표시되는 포드 설치 (0) | 2023.06.18 |
| Possible to create Oracle Database object types inside of PL/SQL? (0) | 2023.06.18 |
| 유형 스크립트: 인터페이스의 상수 (0) | 2023.06.18 |
| 관리되지 않는 DLL이 ASP.NET 서버에 로드되지 않음 (0) | 2023.06.18 |