【问题标题】:Pandas Series Boolean operation on integers onlyPandas 系列仅对整数进行布尔运算
【发布时间】:2015-06-28 14:59:42
【问题描述】:

我使用 Pandas 将一系列 Excel 文件解析为 df。 在给定的列中,我试图让最大值的索引低于某个值 (7000)。

df[columnname][df[columnname]._get_numeric_data() < 7000].idxmax()

Excel 文件做得不太好,但我无法修改它们。围绕数据名声有很多元数据(文本、日期等)。当我解析文件时,数据框下方列出的日期也会出现在列中。

脚本因此引发以下错误:

TypeError: can't compare datetime.datetime to int

我可以通过任何方式从操作中排除日期类型以仅考虑值。

注意。日期行因文件而异,有些文件没有这些行。

【问题讨论】:

  • 能否粘贴几行数据,有助于理解不一致之处?
  • 并且,_get_numeric_data() 从数据框中返回数字列。它不能按照您打算使用的方式工作。

标签: python datetime pandas boolean series


【解决方案1】:

感谢您的帮助。 JonhE,你的方法不起作用,因为面具:

mask = df['x'].map( lambda x: type(x) != str ) & (df['x'] < 8)

不断提出同样的错误:

TypeError: can't compare datetime.datetime to int

也许 .map() 试图同时应用掩码和操作:

(df['x'] < 8)

同时,后者引发错误。

尽管如此,我还是通过集成掩码找到了解决方案:

mask1 = df[columnname].map(lambda x: type(x) == int)

到第二个面具:

mask2 = df[columnname][mask] < maxval

然后我在操作中使用了第二个掩码:

maxsearch = df[columnname][mask2[mask2].index].idxmax()

为此我不得不依靠 .index 来避免引发关键错误。

最终解决方案:

return df[columnname][(df[columnname][df[columnname].map(lambda x: type(x) == int)] < maxval)[df[columnname][df[columnname].map(lambda x: type(x) == int)] < maxval].index].idxmax()

当然有一个简单的方法。

【讨论】:

    猜你喜欢
    • 2018-11-25
    • 2021-11-02
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2016-08-19
    • 2014-10-02
    相关资源
    最近更新 更多