情况:Pandas ' dataframe' s iterrows()
的行在两个不同的环境中表现不同 . 在一个中, row.get()
按预期返回一个值,在另一个 row.get()
本身返回一个系列 - 这是意外的 .
问题:是否有pandas设置/某些配置可能导致以下行为在两种环境之间有所不同?我承认并非此示例中存在所有信息 . 我希望可能的是,显示以下行为,有人可能会认识到这是一些常见模式的结果,或者可能是设置更改 .
详细信息:在第一个环境中,我通过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
变量 . 看起来很正常但是获得( 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来返回带有行值的索引,但也许我在想象事情 .
我还应该注意,在两种情况下打印 row
都会产生相同的结果,就像记录每个列类型,行类型等一样 . 也就是说,我可以断言行类型是相同的,父数据帧中的列类型是相同的,每个行元素的类型是相同的 .
1 回答
解决 . 如果我做了一个更全面的工作分析数据框,我可能已经注意到列名重复 .
返回Series而不是单个值的原因是,通过远上游的
.rename()
操作,有两个具有相同名称的列 . 因此,当请求该列值时,Pandas表现出(应该如此)并作为系列返回 .以下是一个独立的示例 .