python - Python:为数据框中的每一列获取对数差异
问题描述
我有一个数据框列表,并且想为这些数据框中的每个元素记录日志并找到第一个区别。在时间序列计量经济学中,这个过程给出了一个近似的增长率。以下代码
for i in [0, 1, 2, 5]:
df1_list[i] = 100 * np.log(df_list[i]).diff()
给出一个错误
__main__:7: RuntimeWarning: divide by zero encountered in log
__main__:7: RuntimeWarning: invalid value encountered in log
当我查看结果时,结果数据框的许多元素都是 nan。如何修复代码?谢谢 !!
解决方案
一些测试数据
df = pd.DataFrame(np.random.rand(5, 5))
df = df.mask(np.random.random(df.shape) < .1)
0 1 2 3 4
0 0.579643 0.614592 0.333945 0.241791 0.426162
1 0.576076 0.841264 0.235148 0.577707 0.278260
2 0.735097 0.594789 0.640693 0.913639 0.620021
3 0.015446 NaN 0.062203 0.253076 0.042025
4 0.401775 0.522634 0.521139 0.032310 NaN
应用您的代码
for c in df:
print(100 * np.log(df[c]).diff())
产生这样的输出(对于c = 1
):
0 NaN
1 31.394708
2 -34.670002
3 NaN
4 NaN
你可以nans
删除.dropna()
for c in df:
print(100 * np.log(df[c].dropna()).diff())
产生(对于c = 1
)
0 NaN
1 31.394708
2 -34.670002
4 -12.932474
如您所见,我们因此“丢失”了一行,.dropna()
而您的第 0 行将始终如此nan
,因为没有区别。
如果您有兴趣用其他值替换nans ,可以使用不同的技术,例如fillna或imputation。
推荐阅读
- reactjs - 道具更改时反应不重新渲染组件
- python - 排行榜抛光 discord.py
- java - 试图在java中本地创建一个表达式eval函数
- mysql - 环境中的 Laravel Connectin 到 mysql 工作台
- node.js - 加密文件流和管道到 http 响应
- c++ - 我正在使用 c++ 中的插值搜索制作一个简单的程序。我想知道为什么它不会读取我在数组中输入的元素
- python - 如何使用假标题
- git - 如何在 Git 中将文件从 Master 分支移动到 Main 分支
- bios - 从不在 BIOS 中的操作系统启用 CPU 选项
- javascript - Redux 辅助函数来检查值是否在商店中