【问题标题】:pandas dataframe plotting 1 column over 2熊猫数据框在 2 上绘制 1 列
【发布时间】:2015-03-30 02:04:54
【问题描述】:

这让我发疯了,我无法绘制列“b” 它只绘制列'A'.....

这是我的代码,不知道我做错了什么,可能有些愚蠢...... 数据框似乎还可以,奇怪的是我可以同时访问 df['A'] 和 df['b'] 但只有 df['A'].plot() 有效,如果我发出 df['b'] .plot() 我得到这个错误:

Traceback(最近一次调用最后一次):文件 “C:\Python27\lib\site-packages\IPython\core\interactiveshell.py”,行 2883,在运行代码中 exec(code_obj, self.user_global_ns, self.user_ns) 文件“”,第 1 行,在 df['b'].plot() 文件“C:\Python27\lib\site-packages\pandas\tools\plotting.py”,第 2511 行, 在情节系列 **kwds) 文件“C:\Python27\lib\site-packages\pandas\tools\plotting.py”,第 2317 行, 在 _plot plot_obj.generate() 文件“C:\Python27\lib\site-packages\pandas\tools\plotting.py”,第 921 行,在 产生 self._compute_plot_data() 文件“C:\Python27\lib\site-packages\pandas\tools\plotting.py”,第 997 行,在 _compute_plot_data 'plot'.format(numeric_data.class.name)) TypeError: Empty 'Series': no numeric data to plot

import sqlalchemy
import pandas as pd
import matplotlib.pyplot as plt

engine = sqlalchemy.create_engine(
    'sqlite:///C:/Users/toto/PycharmProjects/my_db.sqlite')

tables = engine.table_names()
dic = {}
for t in tables:
    sql = 'SELECT t."weight" FROM "' + t + '" t WHERE t."udl"="IBE SM"'
    dic[t] = (pd.read_sql(sql, engine)['weight'][0], pd.read_sql(sql, engine)['weight'][1])

df = pd.DataFrame.from_dict(dic, orient='index').sort_index()
df = df.set_index(pd.DatetimeIndex(df.index))
df.columns = ['A', 'b']
print(df)

print(df.info())

df.plot()
plt.show()

这是第二张

               A     b
2014-08-05  1.81  3.39
2014-08-06  1.81  3.39
2014-08-07  1.81  3.39
2014-08-08  1.80  3.37
2014-08-11  1.79  3.35
2014-08-13  1.80  3.36
2014-08-14  1.80  3.35
2014-08-18  1.80  3.35
2014-08-19  1.79  3.34
2014-08-20  1.80  3.35
2014-08-27  1.79  3.35
2014-08-28  1.80  3.35
2014-08-29  1.79  3.35
2014-09-01  1.79  3.35
2014-09-02  1.79  3.35
2014-09-03  1.79  3.36
2014-09-04  1.79  3.37
2014-09-05  1.80  3.38
2014-09-08  1.79  3.36
2014-09-09  1.79  3.35
2014-09-10  1.78  3.35
2014-09-11  1.78  3.34
2014-09-12  1.78  3.34
2014-09-15  1.78  3.35
2014-09-16  1.78  3.35
2014-09-17  1.78  3.35
2014-09-18  1.78  3.34
2014-09-19  1.79  3.35
2014-09-22  1.79  3.36
2014-09-23  1.80  3.37
...          ...   ...
2014-12-10  1.73  3.29
2014-12-11  1.74  3.27
2014-12-12  1.74  3.25
2014-12-15  1.74  3.24
2014-12-16  1.74  3.27
2014-12-17  1.75  3.28
2014-12-18  1.76  3.29
2014-12-19  1.04  1.39
2014-12-22  1.04  1.39
2014-12-23  1.04   1.4
2014-12-24  1.04  1.39
2014-12-29  1.04  1.39
2014-12-30  1.04   1.4
2015-01-02  1.04   1.4
2015-01-05  1.04   1.4
2015-01-06  1.04   1.4
2015-01-07   NaN  1.39
2015-01-08   NaN  1.39
2015-01-09   NaN  1.39
2015-01-12   NaN  1.38
2015-01-13   NaN  1.38
2015-01-14   NaN  1.38
2015-01-15   NaN  1.38
2015-01-16   NaN  1.38
2015-01-19   NaN  1.39
2015-01-20   NaN  1.38
2015-01-21   NaN  1.39
2015-01-22   NaN   1.4
2015-01-23   NaN   1,4
2015-01-26   NaN  1.41

[107 rows x 2 columns]
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 107 entries, 2014-08-05 00:00:00 to 2015-01-26 00:00:00
Data columns (total 2 columns):
A    93 non-null float64
b    107 non-null object
dtypes: float64(1), object(1)
memory usage: 2.1+ KB
None

Process finished with exit code 0

【问题讨论】:

  • 刚刚知道了,b 是对象且非浮点数,因为 2015-01-23 NaN 1,4
  • 发布您的答案并接受它,以便将此帖子标记为已回答
  • 2天内可以接受:)

标签: python matplotlib pandas plot


【解决方案1】:

刚刚知道,'b' 是对象类型,而不是 float64,因为这行: 2015-01-23 NaN 1,4

【讨论】:

    猜你喜欢
    • 2017-06-09
    • 2020-09-21
    • 2016-01-07
    • 2022-01-20
    • 2017-10-10
    • 2020-01-14
    • 2017-05-28
    相关资源
    最近更新 更多