tensorflow / skflow

Simplified interface for TensorFlow (mimicking Scikit Learn) for Deep Learning
Apache License 2.0
3.18k stars 439 forks source link

simple linear classification example results in AttributeError in pandas_io.py #87

Closed haarburger closed 8 years ago

haarburger commented 8 years ago

I just installed Scikit Flow and tried to execute the simple linear classification example. Unfortunately this does not work:

/home/chris/anaconda3/lib/python3.4/site-packages/skflow/io/pandas_io.py in extract_pandas_data(data)
     27 def extract_pandas_data(data):
     28     """Extract data from pandas.DataFrame for predictors"""
---> 29     if not isinstance(data, pd.DataFrame):
     30         return data
     31 

AttributeError: 'module' object has no attribute 'DataFrame'

I'm using Python 3.4, Tensorflow 0.6, Sckit-Learn 0.17 and Pandas 0.16.2

terrytangyuan commented 8 years ago

Could you point out which example you are trying? The versions look correct to me and I just tried one of the examples involving pandas. Also, what's the name of the python script you are executing? Sometimes bad file name or existing pd variable in the environment could cause this problem. Try using IPython to run it from scratch.

haarburger commented 8 years ago

I'm running

import skflow
from sklearn import datasets, metrics

iris = datasets.load_iris()
classifier = skflow.TensorFlowLinearClassifier(n_classes=3)
classifier.fit(iris.data, iris.target)
score = metrics.accuracy_score(classifier.predict(iris.data), iris.target)
print("Accuracy: %f" % score)

with IPython and I get

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/home/chris/Workspace/Playground/test.py in <module>()
      4 iris = datasets.load_iris()
      5 classifier = skflow.TensorFlowLinearClassifier(n_classes=3)
----> 6 classifier.fit(iris.data, iris.target)
      7 score = metrics.accuracy_score(classifier.predict(iris.data), iris.target)
      8 print("Accuracy: %f" % score)

/home/chris/anaconda3/lib/python3.4/site-packages/skflow/estimators/base.py in fit(self, X, y, logdir)
    182         self._data_feeder = setup_train_data_feeder(X, y,
    183                                                     self.n_classes,
--> 184                                                     self.batch_size)
    185         if not self.continue_training or not self._initialized:
    186             # Sets up model and trainer.

/home/chris/anaconda3/lib/python3.4/site-packages/skflow/io/data_feeder.py in setup_train_data_feeder(X, y, n_classes, batch_size)
     71         DataFeeder object that returns training data.
     72     """
---> 73     X, y = _data_type_filter(X, y)
     74     if HAS_DASK:
     75         import dask.dataframe as dd

/home/chris/anaconda3/lib/python3.4/site-packages/skflow/io/data_feeder.py in _data_type_filter(X, y)
     49         y = extract_dask_labels(y)
     50     if HAS_PANDAS:
---> 51         X = extract_pandas_data(X)
     52         y = extract_pandas_labels(y)
     53     return X, y

/home/chris/anaconda3/lib/python3.4/site-packages/skflow/io/pandas_io.py in extract_pandas_data(data)
     27 def extract_pandas_data(data):
     28     """Extract data from pandas.DataFrame for predictors"""
---> 29     if not isinstance(data, pd.DataFrame):
     30         return data
     31 

AttributeError: 'module' object has no attribute 'DataFrame'

I don't think there's a anything wrong with the code. Maybe the issue is related to pands? If I run multioutput_regression.py I get the same error in pandas_io.py as above.

terrytangyuan commented 8 years ago

Thanks. Could you try reinstall pandas then? The pandas version is the same as the one I am using though. Googled around it seems like this happens a lot. Try some solutions from Google results.

haarburger commented 8 years ago

Thanks, after I reinstalled pandas it worked.