Pandas Series仅对整数进行布尔运算

时间:2015-04-21 12:35:12

标签: python datetime pandas boolean series

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

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

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

该脚本因此引发以下错误:

TypeError: can't compare datetime.datetime to int

我可以从操作中排除日期类型,只考虑值。

NB。带有日期的行因文件而异,有些文件没有这些行。

1 个答案:

答案 0 :(得分:-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()

当然有一种简单的方法。