鱼C论坛

 找回密码
 立即注册
查看: 1214|回复: 7

[已解决]关于python使用过程中报错的处理方法——抱歉我说不清楚,请看图

[复制链接]
发表于 2020-5-23 15:58:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
麻烦大家指点迷津。
程序段:
  1. import pandas as pd
  2. import numpy as np
  3. import matplotlib.pyplot as plt

  4. # 函数功能:将频域数据转换成时序数据
  5. # bins为频域数据,n设置使用前多少个频域数据,loop设置生成数据的长度

  6. def fft_combine(bins, n, loops=1):
  7. length = int(len(bins) * loops)
  8. data = np.zeros(length)
  9. index = loops * np.arange(0, length, 1.0) / length * (2 * np.pi)
  10. for k, p in enumerate(bins[:n]):
  11.    if k != 0 : p *= 2 # 除去直流成分之外, 其余的系数都 * 2
  12.    data += np.real(p) * np.cos(k*index) # 余弦成分的系数为实数部分
  13.    data -= np.imag(p) * np.sin(k*index) # 正弦成分的系数为负的虚数部分
  14. return index, data

  15. if __name__ == '__main__':
  16. ts = [12529,        11756,        13514,        14135,        17894,        12950        ,11722,        13371,        14160]
  17. # 平稳化
  18. ts_log = np.log(ts)
  19. ts_diff = ts_log.diff(1)
  20. ts_diff = ts_diff.dropna()
  21. print(fy[:10]) # 显示前10个频域数据
  22. fy = np.fft.fft(ts_diff)
  23. conv1 = np.real(np.fft.ifft(fy)) # 逆变换
  24. index, conv2 = fft_combine(fy / len(ts_diff), int(len(fy)/2-1), 1.3) # 只关心一半数据
  25. plt.plot(ts_diff)
  26. plt.plot(conv1 - 0.5) # 为看清楚,将显示区域下拉0.5
  27. plt.plot(conv2 - 1)
  28. plt.show()
复制代码

报错信息:
  1. Traceback (most recent call last):
  2.   File "C:/Users/lenovo/Desktop/lihaile.py", line 25, in <module>
  3.     ts_diff = ts_log.diff(1)
  4. AttributeError: 'numpy.ndarray' object has no attribute 'diff'
复制代码
最佳答案
2020-5-23 16:02:58
本帖最后由 Twilight6 于 2020-5-23 16:13 编辑

  1. ts_diff = ts_log.diff(1)
复制代码

这个报错了
改成这样即可:
  1. ts_log = np.log(ts)
  2. ts_diff = np.diff(ts_log)
  3. df = pd.DataFrame(ts_diff)
  4. ts_diff = df.dropna()
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-23 16:02:58 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-5-23 16:13 编辑

  1. ts_diff = ts_log.diff(1)
复制代码

这个报错了
改成这样即可:
  1. ts_log = np.log(ts)
  2. ts_diff = np.diff(ts_log)
  3. df = pd.DataFrame(ts_diff)
  4. ts_diff = df.dropna()
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-23 16:04:11 | 显示全部楼层
  1. try: #检测是否出现异常范围
  2.     a=str(input('请输入您要导入所属文件夹的文件(不用输入后缀名扩展名):'))
  3.     b=open(a+'.txt','w')
  4.     print(b.write('小甲鱼'))
  5.     sum=1+'2'
  6.     b.close()
  7. except (OSError,TypeError): #如果出现(异常),就这样处理:
  8.     print('类型出错啦')
  9. finally: #就算出错,也会执行的代码
  10.     b.close()
复制代码

写了个例子,内有注释,有问题请继续追问~~
try: #检测是否出现异常范围
except (OSError,TypeError): #如果出现(异常),就这样处理:
finally: #就算出错,也会执行的代码
https://fishc.com.cn/forum.php?m ... peid%26typeid%3D403
这是所有的错误类型,供参考


是这个意思吗...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-23 16:09:41 | 显示全部楼层
本帖最后由 Twilight6 于 2020-5-23 16:15 编辑

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-23 16:52:17 | 显示全部楼层
Twilight6 发表于 2020-5-23 16:02
这个报错了
改成这样即可:

非常感谢你的回复,认真学习中。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-23 17:27:39 | 显示全部楼层
Twilight6 发表于 2020-5-23 16:02
这个报错了
改成这样即可:

你好,我想实现傅里叶预测ts数据的走向,然后现在遇到了瓶颈,请问能指导一下吗?

  1. import pandas as pd
  2. import numpy as np
  3. import matplotlib.pyplot as plt

  4. # bins为频域数据,n设置使用前多少个频域数据,loop设置生成数据的长度

  5. def fft_combine(bins, n, loops=1):
  6. length = int(len(bins) * loops)
  7. data = np.zeros(length)
  8. index = loops * np.arange(0, length, 1.0) / length * (2 * np.pi)
  9. for k, p in enumerate(bins[:n]):
  10.    if k != 0 : p *= 2 # 除去直流成分之外, 其余的系数都 * 2
  11.    data += np.real(p) * np.cos(k*index) # 余弦成分的系数为实数部分
  12.    data -= np.imag(p) * np.sin(k*index) # 正弦成分的系数为负的虚数部分
  13. return index, data

  14. if __name__ == '__main__':
  15. ts = [12529,        11756,        13514,        14135,        17894,        12950        ,11722,        13371,        14160]
  16. # 平稳化

  17. ts_log = np.log(ts)
  18. ts_diff = np.diff(ts_log)
  19. df = pd.DataFrame(ts_diff)
  20. ts_diff = df.dropna()


  21. fy = np.fft.fft(ts_diff)
  22. print(fy[:10]) # 显示前10个频域数据
  23. conv1 = np.real(np.fft.ifft(fy)) # 逆变换
  24. index, conv2 = fft_combine(fy / len(ts_diff), int(len(fy)/2-1), 1.3) # 只关心一半数据
  25. plt.plot(ts_diff)
  26. plt.plot(conv1 - 0.5) # 为看清楚,将显示区域下拉0.5
  27. plt.plot(conv2 - 1)
  28. plt.show()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-23 18:03:07 | 显示全部楼层
明月小仙 发表于 2020-5-23 17:27
你好,我想实现傅里叶预测ts数据的走向,然后现在遇到了瓶颈,请问能指导一下吗?

抱歉 我也是刚刚接触 numpy 和 pandas 还没深入 帮不了多少哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-31 10:41:07 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-20 23:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表