pandas DataFrame "no numeric data to plot" error

PythonPandasMatplotlib

Python Problem Overview


I have a small DataFrame that I want to plot using pandas.

	2	3
0	1300	1000
1	242751149	199446827
2	237712649	194704827
3	16.2	23.0

I am still trying to learn plotting from within pandas . I want a plot In the above example when I say .

df.plot()

I get the strangest error.

Library/Python/2.7/site-packages/pandas-0.16.2-py2.7-macosx-10.10-intel.egg/pandas/tools/plotting.pyc in _compute_plot_data(self)
   1015         if is_empty:
   1016             raise TypeError('Empty {0!r}: no numeric data to '
-> 1017                             'plot'.format(numeric_data.__class__.__name__))
   1018 
   1019         self.data = numeric_data

TypeError: Empty 'DataFrame': no numeric data to plot

While I understand that the DataFrame with its very lopsided values makes a very un-interesting plot. I am wondering why the error message complains of no numeric data to plot.

Python Solutions


Solution 1 - Python

Try the following before plotting:

df=df.astype(float)

Solution 2 - Python

To solve this you have to convert the particular column or columns you want to use to numeric. First let me create a simple dataframe with pandas and numpy to understand it better.

#creating the dataframe

import pandas as pd
import numpy as np
details=[['kofi',30,'male',1.5],['ama',43,'female',2.5]]
pf=pd.DataFrame(np.array(details),[0,1],['name','age','sex','id'])

pf  #here i am calling the dataframe
 
   name age     sex   id
0  kofi  30    male  1.5
1   ama  43  female  2.5

#to make your plot work you need to convert the columns that have numbers into numeric
as seen below 

pf.id=pd.to_numeric(pf.id)
pf.age=pd.to_numeric(pf.age)

pf.plot.scatter(x='id',y='age')

#This should work perfectly

Solution 3 - Python

Inspired by alex314159, if you have other data than float in the same table

df["YourColumnNameHere"]=df["YourColumnNameHere"].astype(float)

Solution 4 - Python

Convert non numeric data into numeric using:

DataFrame["Column_name"] = DataFrame["Column_name"].str.replace("[\$\,\.]", "")

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionharijayView Question on Stackoverflow
Solution 1 - Pythonalex314159View Answer on Stackoverflow
Solution 2 - Pythonchrys111View Answer on Stackoverflow
Solution 3 - PythonPunnerudView Answer on Stackoverflow
Solution 4 - PythonAyaz LakhoView Answer on Stackoverflow