ede*_*esz 67 nan dataframe python-2.7 pandas
我在Python 2.7中使用这个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
Run Code Online (Sandbox Code Playgroud)
我需要用Temp_Rating列中的值替换列中的所有NaN Farheit.
这就是我需要的:
File heat Observation
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
Run Code Online (Sandbox Code Playgroud)
如果我进行布尔选择,我一次只能选出其中一列.问题是如果我然后尝试加入它们,我在保留正确的顺序时无法做到这一点.
我怎样才能找到Temp_Rating带有NaNs的行并用Farheit列的同一行中的值替换它们?
Jon*_*ice 99
假设您的DataFrame位于df:
df.Temp_Rating.fillna(df.Farheit, inplace=True)
del df['Farheit']
df.columns = 'File heat Observations'.split()
Run Code Online (Sandbox Code Playgroud)
首先用NaN相应的值替换任何值df.Farheit.删除'Farheit'列.然后重命名列.结果DataFrame如下:

U10*_*ard 19
@Jonathan 的答案很好,但是有点过分了,只需使用pop:
df['Temp_Rating'] = df['Temp_Rating'].fillna(df.pop('Farheit'))
Run Code Online (Sandbox Code Playgroud)
zsa*_*512 17
上述解决方案对我不起作用.我使用的方法是:
df.loc[df['foo'].isnull(),'foo'] = df['bar']
Run Code Online (Sandbox Code Playgroud)
您还可以使用which 替换列中的mask值,其中Temp_Ratingis NaNFarheit:
df['Temp_Rating'] = df['Temp_Rating'].mask(df['Temp_Rating'].isna(), df['Farheit'])
Run Code Online (Sandbox Code Playgroud)
小智 5
解决这个问题的另一种方法,
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)
Run Code Online (Sandbox Code Playgroud)
返回:
(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)
Run Code Online (Sandbox Code Playgroud)
接受的答案使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53589 次 |
| 最近记录: |