Python Pandas统计特定值占比时如何排除NaN空单元格不参与计数
解决pandas统计占比时无法排除NaN行的问题
在pandas中NaN和空字符串""是两种完全独立的空值类型,你之前的判断逻辑只排除了空字符串,没有覆盖NaN的场景,直接调用np.isnan()对pandas Series操作也会出现不生效的问题,应该使用pandas内置的.notna()方法判断值是否非空。
修正后的代码如下:
import pandas as pd df2 = pd.DataFrame(supplier_data_df, columns=['supplier keywords', 'supplier in ocr']) # 同时排除NaN和空字符串的有效行 total_suppliers = df2[(df2["supplier in ocr"].notna()) & (df2["supplier in ocr"] != "") & (df2["supplier keywords"].notna()) & (df2["supplier keywords"] != "")] # 此处注意需要先正确定义supplier_filtered_df,筛选出包含你要统计的特定值的行,筛选时也建议加上.notna()避免误匹配 # 示例:supplier_filtered_df = total_suppliers[total_suppliers['对应列名'] == '你要统计的特定值'] percentilesupplierkeyword = len(supplier_filtered_df)/len(total_suppliers) * 100 print(percentilesupplierkeyword,"% of supplier-keywords have an issue")
如果你不需要保留排除空字符串的逻辑,只需要排除NaN的话,可以直接用.dropna()方法简化写法:
# 直接删除两列中任意一列包含NaN的行 total_suppliers = df2.dropna(subset=['supplier keywords', 'supplier in ocr'])
内容的提问来源于stack exchange,提问作者Leopold Wahlbeck
相关产品推荐
相关产品推荐

