Pandas iterrows() row.get() method returning series instead of cell value
情况:大熊猫数据帧的
问题:是否有熊猫设置/某些配置可能导致两个环境之间的以下行为不同?我承认在这个例子中并不是所有的信息都存在。我希望可能的是,显示以下行为时,有人可能会认识到这是某些常见模式或设置更改的结果。
细节:在第一个环境中,我通过pandas的
1 2 3 4 5 6 | print(type(row)) # pandas.series.Series foo_val = row.get('foo', default=None) print(type(foo_val)) # float print(foo_val) # 234.23 |
现在,当我再次运行时,在第二个环境中,EDCOX1×0操作返回EDCOX1×5×变量。它似乎正常,但得到(EDOCX1,1),每个元素的行为不同于以前。具体地说,返回值不是int、浮点、STR等,而是本身的一系列,索引保持不变,这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 |
最后的想法:我似乎记得在某个时刻,您可以配置panda以返回具有行值的索引,但也许我在想象事情。
我还应该注意,在这两种情况下,打印
断然的。如果我对数据帧进行更彻底的分析,我可能会注意到列名重复。
返回序列而不是单个值的原因是,通过上游很远的
下面是一个独立的例子。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | >>> 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'> |