我有一个名为“ design”的DataFrame对象,它是从一个名为“ df”的DataFrame对象构造的,如下所示:
design = df.loc[year, [DV] + IVs + controls].copy(deep=True)
在哪里
"DV" = a string
"IVs" = list of strings
"controls" = list of strings
然后,当我尝试访问“设计”列时,通常会得到预期的Series,并且可以使用.unique()方法:
design[DV].unique()
通常,^可以正常工作。
但是,有时候,当我使用DV,IV和控件的不同组合时,design [DV]是一个DataFrame(它没有.unique()方法)。我对为什么感到困惑。
有任何想法吗?
注意:也许这很重要?有时“控件”是一个空列表。有时列表包含unicode字符串。
提前致谢!
编辑:
@AndyHayden,这是一个示例:
设计=具有一列重复('SPKATH')的DataFrame:
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)
当我调用design [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
发生这种情况的一种情况是,如果您有重复的列,即DV在IV或控件中。例如:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句