当我期待一个系列时,另一个数据帧列

2024-05-29 03:34:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为“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

当我尝试访问“design”列时,我通常会像预期的那样获取一个序列,并且可以使用.unique()方法:

design[DV].unique()  

通常情况下,工作正常。你知道吗

然而,有时,当我使用DV、IVs和控件的不同组合时,design[DV]是一个数据帧(它没有.unique()方法)。我不明白为什么。你知道吗

有什么想法吗?你知道吗

注意:也许这很重要?有时“控件”是一个空列表。有时列表包含unicode字符串。你知道吗

提前谢谢!你知道吗

编辑:

@AndyHayden,举个例子:

design=DataFrame,有一列重复('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)

调用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

Tags: columnsof对象namedataframepandasdflist
1条回答
网友
1楼 · 发布于 2024-05-29 03:34:06

出现这种情况的一种情况是,如果有重复的列,即DV在IVs或controls中。例如:

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

相关问题 更多 >

    热门问题