我有一个基于其他数据集创建的数据集。在我的新数据中,一些列具有nan值。我想在每列上做一个日志。但是我需要所有行,即使它们具有Nan值。在应用日志之前,我应该如何处理Nan值?例如,请考虑以下数据集:
a b c
1 2 3
4 5 6
7 nan 8
9 nan nan
我不想删除带有nan值的行。我需要它们来登录它们。
例如,我需要在第6行中使用值7和8。 感谢。
答案 0 :(得分:3)
在计算每个单独的单元格时,nan
不会影响日志。更重要的是,np.log
具有将在pd.DataFrame
上运行并返回pd.DataFrame
np.log(df)
a b c
0 0.000000 0.693147 1.098612
1 1.386294 1.609438 1.791759
2 1.945910 NaN 2.079442
3 2.197225 NaN NaN
注意时间差异
%timeit np.log(df)
%timeit pd.DataFrame(np.log(df.values), df.index, df.columns)
%timeit df.applymap(np.log)
134 µs ± 5.51 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
107 µs ± 1.79 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
835 µs ± 12.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
对@IanS的反应
中的subok=True
参数
它控制是否保留原始类型。如果我们将其转为False
np.log(df, subok=False)
array([[ 0. , 0.69314718, 1.09861229],
[ 1.38629436, 1.60943791, 1.79175947],
[ 1.94591015, nan, 2.07944154],
[ 2.19722458, nan, nan]])