'DataFrame' - Objekt hat kein Attribut 'value_counts'
Mein dataset ist ein DataFrame dimension (840,84). Wenn ich den code schreiben:
ds[ds.columns[1]].value_counts()
Bekomme ich eine korrekte Ausgabe:
Out[82]:
0 847
1 5
Name: o_East, dtype: int64
Aber wenn ich Schreibe eine Schleife zum speichern der Werte, die ich bekomme 'DataFrame' - Objekt hat kein Attribut 'value_counts'. Ich kann nicht erklären, warum ...
wind_vec = []
wind_vec = [(ds[x].value_counts()) for x in ds.columns]
UPDATE FÜR DEN CODE
import pandas as pd
import numpy as np
import numpy.ma as ma
import statsmodels.api as sm
import matplotlib
import matplotlib.pyplot as plt
from sklearn.preprocessing import OneHotEncoder
dataset = pd.read_csv('data/dataset.csv')
ds = dataset
o_wdire = pd.get_dummies(ds['o_wdire'])
s_wdire = pd.get_dummies(ds['s_wdire'])
t_wdire = pd.get_dummies(ds['t_wdire'])
k_wdire = pd.get_dummies(ds['k_wdire'])
b_wdire = pd.get_dummies(ds['b_wdire'])
o_wdire.rename(columns={'ENE': 'o_ENE','ESE': 'o_ESE', 'East': 'o_East', 'NE': 'o_NE', 'NNE': 'o_NNE', 'NNW': 'o_NNW', \
'NW': 'o_NW', 'North': 'o_North', 'SE': 'o_SE', 'SSE': 'o_SSE', 'SSW': 'o_SSW', 'SW': 'o_SW', \
'South': 'o_South', 'Variable': 'o_Variable', 'WSW': 'o_WSW','West':'o_West'}, inplace=True)
s_wdire.rename(columns={'ENE': 's_ENE','ESE': 's_ESE', 'East': 's_East', 'NE': 's_NE', 'NNE': 's_NNE', 'NNW': 's_NNW', \
'NW': 's_NW', 'North': 's_North', 'SE': 's_SE', 'SSE': 's_SSE', 'SSW': 's_SSW', 'SW': 's_SW', \
'South': 's_South', 'Variable': 's_Variable', 'West': 's_West','WSW': 's_WSW'}, inplace=True)
k_wdire.rename(columns={'ENE': 'k_ENE','ESE': 'k_ESE', 'East': 'k_East', 'NE': 'k_NE', 'NNE': 'k_NNE', 'NNW': 'k_NNW', \
'NW': 'k_NW', 'North': 'k_North', 'SE': 'k_SE', 'SSE': 'k_SSE', 'SSW': 'k_SSW', 'SW': 'k_SW', \
'South': 'k_South', 'Variable': 'k_Variable', 'WNW': 'k_WNW', 'West': 'k_West','WSW': 'k_WSW'}, inplace=True)
b_wdire.rename(columns={'ENE': 'b_ENE','ESE': 'b_ESE', 'East': 'b_East', 'NE': 'b_NE', 'NNE': 'b_NNE', 'NNW': 'b_NNW', \
'NW': 'b_NW', 'North': 'b_North', 'SE': 'b_SE', 'SSE': 'b_SSE', 'SSW': 'b_SSW', 'SW': 'b_SW', \
'South': 'b_South', 'Variable': 'b_Variable', 'WSW': 'b_WSW', 'WNW': 'b_WNW', 'West': 'b_West'}, inplace=True)
t_wdire.rename(columns={'ENE': 't_ENE','ESE': 't_ESE', 'East': 't_East', 'NE': 't_NE', 'NNE': 't_NNE', 'NNW': 't_NNW', \
'NW': 't_NW', 'North': 't_North', 'SE': 't_SE', 'SSE': 't_SSE', 'SSW': 't_SSW', 'SW': 't_SW', \
'South': 't_South', 'Variable': 't_Variable', 'WSW': 't_WSW', 'WNW': 't_WNW', 'West':'t_West'}, inplace=True)
#WIND
ds_wdire = pd.DataFrame(pd.concat([o_wdire,s_wdire,t_wdire,k_wdire,b_wdire],axis=1))
ds_wdire = ds_wdire.astype('float64')
In [93]: ds_wdire.shape
Out[93]: (852, 84)
In[101]: ds_wdire[ds_wdire.columns[0]].head()
Out[101]:
0 0
1 0
2 0
3 0
4 0
Name: o_ENE, dtype: float64
In[103]: ds_wdire[ds_wdire.columns[0]].value_counts()
Out[103]:
0 838
1 14
Name: o_ENE, dtype: int64
In[104]: [ds_wdire[x].value_counts() for x in ds_wdire.columns]
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-104-d9756c468818> in <module>()
1 #Filtering for the wind direction based on the most frequent ones.
----> 2 [ds_wdire[x].value_counts() for x in ds_wdire.columns]
<ipython-input-104-d9756c468818> in <listcomp>(.0)
1 #Filtering for the wind direction based on the most frequent ones.
----> 2 [ds_wdire[x].value_counts() for x in ds_wdire.columns]
/home/florian/anaconda3/lib/python3.5/site-packages/pandas/core/generic.py in __getattr__(self, name)
2358 return self[name]
2359 raise AttributeError("'%s' object has no attribute '%s'" %
-> 2360 (type(self).__name__, name))
2361
2362 def __setattr__(self, name, value):
AttributeError: 'DataFrame' object has no attribute 'value_counts'
- Ihr code sollte gearbeitet haben, müssen Sie die post mehr code diesen Fehler zu reproduzieren, haben Sie erklärt
x
davor irgendwo??? - Versuchen Sie, mit
loc
:wind_vec = [(ds.loc[:, x].value_counts()) for x in ds.columns]
- Ich habe aktualisiert, der code in meinem post
- Ich habe den gleichen Fehler mit loc : "AttributeError: 'DataFrame' - Objekt hat kein Attribut 'value_counts"
- was passiert, wenn Sie
ds_wire.apply(pd.Series.value_counts)
, auch du hast nicht geschrieben reicht die Daten und den code für andere, Sie zu unterstützen - mit anwenden dies bekomme ich: Out[108]: o_ENE o_East o_NE o_NNE o_NNW o_NW o_North o_SE o_SSE o_SSW ... b_North b_SE b_SSE b_SSW b_SW b_South b_Variable b_WNW b_WSW b_West 0 838 847 805 771 811 811 677 847 818 770 ... 710 739 647 835 845 801 817 841 846 842 1 14 5 47 81 41 41 175 5 34 82 ... 142 113 205 17 7 51 35 11 6 10 2 Zeilen × 84 Spalten
- Weiter zu deiner ersten Frage, die ich nicht erklären
x
vor irgendwo. - Sie müssen einen link zu posten deine Daten, wie es steht Ihr code sollte gearbeitet habe, und die Tatsache, dass
ds_wire.apply(pd.Series.value_counts)
Werke bedeutet, dass die df scheint in Ordnung zu sein, eine Möglichkeit ist, dass Sie doppelte Spaltennamen. Was bedeutetlen(df.columns.unique())
zeigen? wenn es nicht 84 dann Sie doppelte Namen haben oder versuchends_wire.columns.is_unique
- Können Sie ausdrucken x und ds[x] gleich nach der Fehler?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dank @EdChum emfehlen, das habe ich überprüft :
Tatsächlich fehlt ein name-Wert in der dict-das sollte geändert von 'WNW' zu 'o_WNW'.:
Vielleicht wäre es besser zu schreiben eine Schleife, die fügt ein Präfix, um die Windrichtung Variablen, auf diese Weise würde ich vermeiden, diese Art von problem.
df.columns = ['o_' + x for x in df]
und ähnlich für die anderen dfs