首页 > 解决方案 > Pandas 数据框:没有要绘制的数字数据

问题描述

我有一个存储在数据库中的表MySQL

我使用 MySQL 连接器获取结果并将其复制到 DataFrame。在那之前没有任何问题。

现在,当我从 MySQL 中获取结果时,它们是字符串的形式,所以我将的值转换为strings,并将 as 保留为。现在我想将它绘制在条形图中,数字数据为 CONFIRMED_CASES,状态名称为 STATE_NAME,但它向我显示了这个错误:intCONFIRMED_CASESSTATE_NAMEstr

Traceback (most recent call last):
  File "c:\Users\intel\Desktop\Covid Tracker\get_sql_data.py", line 66, in <module>
    fd.get_graph()
  File "c:\Users\intel\Desktop\Covid Tracker\get_sql_data.py", line 59, in get_graph
    ax = df.plot(y='STATE_NAME', x='CONFIRMED_CASES',
    ...
    raise TypeError("no numeric data to plot")
TypeError: no numeric data to plot

这是我的代码:

from operator import index
from sqlalchemy import create_engine
import mysql.connector
import pandas as pd
import matplotlib.pyplot as plt

mydb = mysql.connector.connect(
    host="localhost",
    user="abhay",
    password="1234",
    database="covid_db"
)

mycursor = mydb.cursor()


class fetch_data():
    def __init__(self):
        ...

    def get_data(self, cmd):
        ...

    def get_graph(self):
        mydb = mysql.connector.connect(
            host="localhost",
            user="abhay",
            password="1234",
            database="covid_db"
        )

        mycursor = mydb.cursor(buffered=True)

        mycursor.execute(
            "select CONFIRMED_CASES from india;")
        query = mycursor.fetchall()

        # the data was like 10,000 so I removed the ',' and converted it to int
        query = [int(x[0].replace(',', '')) for x in query]
        print(query)

        query2 = mycursor.execute(
            "select STATE_NAME from india;")
        query2 = mycursor.fetchall()

        # this is the query for state name and i kept it as str only...
        query2 = [x[0] for x in query2]
        print(query2)

        df = pd.DataFrame({
            'CONFIRMED_CASES': [query],
            'STATE_NAME': [query2],
        })

        # it gives me the error here...
        ax = df.plot(y='STATE_NAME', x='CONFIRMED_CASES',
                kind='bar')

        ax.ticklabel_format(style='plain', axis='y')
        plt.show()


fd = fetch_data()
fd.get_graph()

我不知道为什么没有数值。我将它设置为int,但仍然...

标签: pythonpython-3.xpandasdataframematplotlib

解决方案


在绘制图形之前,使用下面的代码将数据转换为整数。

df['CONFIRMED_CASES'] = df['CONFIRMED_CASES'].astype('int64')

推荐阅读