2014-02-21 45 views
1

我有所謂的「設計」的一個數據幀的對象,我從所謂的「DF」像這樣一個數據幀對象構建另一個數據框:熊貓數據框柱時,我期待一個系列

design = df.loc[year, [DV] + IVs + controls].copy(deep=True) 

其中

"DV" = a string 

"IVs" = list of strings 

"controls" = list of strings 

當我再嘗試訪問的「設計」專欄中,我通常得到一個系列,符合市場預期,並且可以使用.unique()方法:

design[DV].unique() 

^工作正常,通常。

但是,有時,當我使用DV,IVs和控件的不同組合時,design [DV]是一個DataFrame(它沒有.unique()方法)。我很難理解爲什麼。

任何想法?

注意:也許這很重要?有時「控制」是一個空的列表。有時列表包含unicode字符串。

在此先感謝!

編輯:

@AndyHayden,這裏是一個例子:

設計=數據幀與一列重複的( 'SPKATH'):

DV = 'LETDIE1'

ipdb> design.columns Index([u'LETDIE1', u'SUICIDE1', u'REGION', u'AGE', u'SEX', u'RACE', u'DEGREE', u'INCOME', u'RELIG', u'RELITEN', u'ATTEND', u'POLVIEWS', u'SPKATH', u'SPKCOM', u'SPKATH'], dtype=object) 

當我打電話設計[DV] .unique()時出現錯誤:

> /home/misha/.local/lib/python2.7/site-packages/pandas-0.12.0-py2.7-linux-x86_64.‌​egg/pandas/core/frame.py(2088)__getattr__() 2087 raise AttributeError("'%s' object has no attribute '%s'" % -> 2088 (type(self).__name__, name)) 2089 

ipdb> a 

self = <class 'pandas.core.frame.DataFrame'> 

Index: 1530 entries, 1977.0 to 1977.0 

Data columns (total 1 columns): LETDIE1 1530 non-null values dtypes: float64(1) 

name = unique 

回答

1

發生這種情況的一種情況是,如果您有重複列,即DV在IVs或控件中。例如:

In [11]: df = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns=list('ABC')) 

In [12]: df_a = df.loc[:, list('ABB')] 

In [13]: df_a 
Out[13]: 
    A B B 
0 1 2 2 
1 4 5 5 

In [14]: df_a['A'] # a Series 
Out[14]: 
0 1 
1 4 
Name: A, dtype: int64 

In [15]: df_a['B'] # a DataFrame 
Out[15]: 
    B B 
0 2 2 
1 5 5 

一個辦法來解決這個問題是位置選擇:

In [16]: df_a.iloc[:, 1] # always a Series 
Out[16]: 
0 2 
1 5 
Name: B, dtype: int64 
+0

劉德華,非常感謝!我的DataFrame確實包含重複項,但是,我想要的列(DV)沒有重複。 要使用上面的示例,就好像df_a ['A']在存在重複項'B'時返回了DataFrame,但是當我刪除它們時,即del df_a ['B'],然後df_a [ A']按照我的意願返回了一個系列。希望我想說的話是有道理的。如果不是,我可以描述我的數據中特別發生的事情。 – DrMisha

+0

@DrMisha不接受任何理由? –

+0

安迪,我之間接受/不接受有點之間動搖,因爲雖然你的評論解決了我的問題,它不是一個..直接(不知道要使用什麼字)解決方案。在我的數據調用中,df_a ['A']返回了一個DataFrame,即使'A'列沒有被複制。擺脫重複的'B'列使得df_a ['A']按照我的意願返回一個系列。這種行爲對我來說似乎很奇怪,但幸運的是我不需要重複的'B'列。所以我很高興刪除這些來獲得我想要的行爲。任何人,接受答案,並感謝您節省我幾個小時的麻煩! – DrMisha

相關問題