df = pd.DataFrame([
[-0.532681, 'foo', 0],
[1.490752, 'bar', 1],
[-1.387326, 'foo', 2],
[0.814772, 'baz', ' '],
[-0.222552, ' ', 4],
[-1.176781, 'qux', ' '],
], columns='A B C'.split(), index=pd.date_range('2000-01-01','2000-01-06'))
# replace field that's entirely space (or empty) with NaN
print(df.replace(r'^s*$', np.nan, regex=True))
# output
# A B C
# 2000-01-01 -0.532681 foo 0
# 2000-01-02 1.490752 bar 1
# 2000-01-03 -1.387326 foo 2
# 2000-01-04 0.814772 baz NaN
# 2000-01-05 -0.222552 NaN 4
# 2000-01-06 -1.176781 qux NaN
def exercise4(df):
df1 = df.select_dtypes(np.number)
df2 = df.select_dtypes(exclude = 'float')
mode = df2.mode()
df3 = df1.fillna(df.mean())
df4 = df2.fillna(mode.iloc[0,:])
new_df = [df3,df4]
df5 = pd.concat(new_df,axis=1)
new_cols = list(df.columns)
df6 = df5[new_cols]
return df6