Python 方法返回序列而不是单元格值
情况:熊猫数据帧的Python 方法返回序列而不是单元格值,python,pandas,Python,Pandas,情况:熊猫数据帧的iterrows()行在两种不同的环境中表现不同。在其中一个中,row.get()按预期返回一个值,在另一个中,row.get()本身返回一个序列,这是意外的 问题:是否存在可能导致两个环境之间的以下行为不同的设置/某些配置?我承认在这个例子中并不是所有的信息都存在。我所希望的是,如果出现以下行为,有人可能会认识到这是某种常见模式或设置更改的结果 详情: 在第一个环境中,我通过Pandas的iterrows()方法迭代行。在每一行中,我访问一个给定的属性,如下所示: print
iterrows()
行在两种不同的环境中表现不同。在其中一个中,row.get()
按预期返回一个值,在另一个中,row.get()
本身返回一个序列,这是意外的
问题:是否存在可能导致两个环境之间的以下行为不同的设置/某些配置?我承认在这个例子中并不是所有的信息都存在。我所希望的是,如果出现以下行为,有人可能会认识到这是某种常见模式或设置更改的结果
详情:
在第一个环境中,我通过Pandas的iterrows()
方法迭代行。在每一行中,我访问一个给定的属性,如下所示:
print(type(row)) # pandas.series.Series
foo_val = row.get('foo', default=None)
print(type(foo_val)) # float
print(foo_val) # 234.23
现在,当我再次在第二个环境中跑步时;iterrows()
操作返回一个行
变量。它看起来很正常,但获取(row.get()
)每个元素的行为都与以前不同。具体来说,返回值不是int、float、str等,而是一个保留索引的系列,这样:
print(type(row)) # pandas.series.Series
foo_val = row.get('foo', default=None)
print(type(foo_val)) # pandas.series.Series
print(foo_val)
# foo 234.23
# Name: 0, dtype: object
foo_val_v2 = foo_val.get('foo', default=None)
print(type(foo_val_v2)) # float
print(foo_val_v2) # 234.23
最后的想法:
我似乎记得在某个时候,您可以配置pandas以返回带有行值的索引,但也许我是在想象
我还应该注意,在这两种情况下打印
行
会得到相同的结果,记录每个列类型、行类型等也是如此。也就是说,我可以断言行类型相同,父数据帧中的列类型相同,每个行元素的类型相同。。如果我对dataframe进行更彻底的分析,我可能会注意到列名重复
返回序列而不是单个值的原因是,通过远上游的.rename()
操作,有两列具有相同的名称。因此,Pandas的行为(应该如此)在请求该列值时作为一个系列返回
下面是一个独立的示例
>>> df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
>>> df.rename(columns={'B': 'A'})
A A
0 1 4
1 2 5
2 3 6
>>> df['A']
0 1
1 2
2 3
Name: A, dtype: int64
>>> type(df['A'])
<class 'pandas.core.series.Series'>
>>> df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
>>> df = df.rename(columns={'B': 'A'})
>>> df['A']
A A
0 1 4
1 2 5
2 3 6
>>> type(df['A'])
<class 'pandas.core.frame.DataFrame'>
数据帧({“A”:[1,2,3],“B”:[4,5,6]})
>>>重命名(列={'B':'A'})
A
0 1 4
1 2 5
2 3 6
>>>df['A']
0 1
1 2
2 3
名称:A,数据类型:int64
>>>类型(df['A'])
>>>df=pd.DataFrame({“A”:[1,2,3],“B”:[4,5,6]})
>>>df=df.rename(列={'B':'A'})
>>>df['A']
A
0 1 4
1 2 5
2 3 6
>>>类型(df['A'])
如果没有一个可复制的例子,任何人都很难提供帮助。熊猫身上的许多错误修复都是通过SO(例如最近),但这需要一些东西来开始。谢谢,我承认这是一个问题,我无法找出繁殖的错误。因此,这可能是一个糟糕的SO帖子。我这样做是因为有人可能认识到这个问题,或者在过去遇到过这个问题。与此同时,我正试图更好地隔离它(但一整天都干了,所以这里有冰雹玛丽)。