python - 如何仅记录数据框中的非零值并将 O 替换为 NA?

标签 python python-2.7 python-3.x dataframe

我如何记录数据框中的非零值并将 0 替换为 NA。

我有如下数据框:

     time                 y1  y2
0    2017-08-06 00:52:00   0   10
1    2017-08-06 00:52:10   1   20
2    2017-08-06 00:52:20   2   0
3    2017-08-06 00:52:30   3   0
4    2017-08-06 00:52:40   0   5
5    2017-08-06 00:52:50   4   6
6    2017-08-06 00:53:00   6   11
7    2017-08-06 00:53:10   7   12
8    2017-08-06 00:53:20   8   0
9    2017-08-06 00:53:30   0   13

我想获取所有列的日志,期望第一列时间和日志应该只计算非零值,零应该替换为 NA?我该怎么做?

所以,我试着做这样的事情:

cols = df.columns.difference(['time'])
# Replacing O's with NA's using below:

df[cols] = df[cols].mask(np.isclose(df[cols].values, 0), np.nan)

df[cols] = np.log(df[cols]) # but this will try take log of NA's also.

请帮忙。

输出应该是具有相同时间列的数据帧,所有零都替换为 NA,并且所有列的剩余值的对数等价于第一列。

最佳答案

如果我理解正确,你可以用 np.nan 替换零,然后直接调用 np.log - 它忽略 NaN值就好了。

np.log(df[['y1', 'y2']].replace(0, np.nan))

示例

>>> df = pd.DataFrame({'time': pd.date_range('20170101', '20170110'), 
                       'y1' : np.random.randint(0, 3, 10), 
                       'y2': np.random.randint(0, 3, 10)})

>>> df 
        time  y1  y2
0 2017-01-01   1   2
1 2017-01-02   0   1
2 2017-01-03   2   0
3 2017-01-04   0   1
4 2017-01-05   1   0
5 2017-01-06   1   1
6 2017-01-07   2   0
7 2017-01-08   1   0
8 2017-01-09   0   1
9 2017-01-10   2   1

>>> df[['log_y1', 'log_y2']] = np.log(df[['y1', 'y2']].replace(0, np.nan))

>>> df
        time  y1  y2    log_y1    log_y2
0 2017-01-01   1   2  0.000000  0.693147
1 2017-01-02   0   1       NaN  0.000000
2 2017-01-03   2   0  0.693147       NaN
3 2017-01-04   0   1       NaN  0.000000
4 2017-01-05   1   0  0.000000       NaN
5 2017-01-06   1   1  0.000000  0.000000
6 2017-01-07   2   0  0.693147       NaN
7 2017-01-08   1   0  0.000000       NaN
8 2017-01-09   0   1       NaN  0.000000
9 2017-01-10   2   1  0.693147  0.000000

关于python - 如何仅记录数据框中的非零值并将 O 替换为 NA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45529029/

相关文章:

python - OpenCV Python cv2.perspectiveTransform

python - 如何以编程方式在 Django 的 ModelForm 中设置字段?

python - Google Web Toolkit 类似于 Django 中的应用程序

regex - 为什么这个 python 正则表达式返回不匹配?

python - 为什么我们在python中的每个方法都需要对应的类函数?

python - 在pycharm中使用Conda环境

qt - 拖放按钮和下拉菜单 PyQt/Qt designer

python - 在 concurrent.futures 中获取异常的原始行号

python - 如何更改数组中元素的索引

python-3.x - 如何在 Python 中将文件转换为列表