我使用Pandas将一系列Excel文件解析为df。 在给定的列中,我试图将最大值的索引置于某个值(7000)以下。
df[columnname][df[columnname]._get_numeric_data() < 7000].idxmax()
Excel文件做得不是很好,但我无法修改它们。数据名称周围有很多元数据(文本,日期等)。当我解析文件时,数据框下面列出的日期也出现在列中。
该脚本因此引发以下错误:
TypeError: can't compare datetime.datetime to int
我可以从操作中排除日期类型,只考虑值。
NB。带有日期的行因文件而异,有些文件没有这些行。
答案 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()
当然有一种简单的方法。