Python 按列中的值筛选多标头DataFrame中的行

Python 按列中的值筛选多标头DataFrame中的行,python,pandas,dataframe,filter,Python,Pandas,Dataframe,Filter,我正在构建一个Python脚本来执行以下操作: 在目录中列出CSV 将单个CSV文件读取到DataFrame->“数据”(第2行(参数名称)和第3行(参数单位)定义为标题) 仅当列“TMOD1”、“TMOD2”、“TMOD3”和“TMOD4”中的值为0时才保留行(如果其中一个不是0,则整行必须保留) 用单位“位”删除所有列(->参数) 删除所有具有超过10个“NaN”值的行 将过滤后的数据帧“数据”追加到数据帧“结果” 对所有CSV文件重复步骤2-7 将生成的数据帧“结果”保存为新的CSV文件

我正在构建一个Python脚本来执行以下操作:

  • 在目录中列出CSV

  • 将单个CSV文件读取到DataFrame->“数据”(第2行(参数名称)和第3行(参数单位)定义为标题)

  • 仅当列“TMOD1”、“TMOD2”、“TMOD3”和“TMOD4”中的值为0时才保留行(如果其中一个不是0,则整行必须保留)

  • 用单位“位”删除所有列(->参数)

  • 删除所有具有超过10个“NaN”值的行

  • 将过滤后的数据帧“数据”追加到数据帧“结果”

  • 对所有CSV文件重复步骤2-7

  • 将生成的数据帧“结果”保存为新的CSV文件

  • 我被困在如何实施步骤3和步骤4,其他一切都很好

    我尝试了以下步骤3:

    data = data[(data.TMOD1 == 0) & (data.TMOD2 == 0) & (data.TMOD3 == 0) & (data.TMOD4 == 0)]
    
    对于步骤4,请执行以下操作:

    data.drop(labels='bit', axis=1, level=1, inplace=True)
    
    当省略步骤3并使用多标题行数据帧时,步骤4可以完美地工作

    然而,步骤3仅在切换到单个标题行数据帧时有效-在这种情况下,步骤4显然不起作用

    我想我打错了正确的标题级别

    data = data[(data['TMOD1']['bit'] == 0) & (data['TMOD2']['bit'] == 0) & (data['TMOD3']['bit'] == 0) & (data['TMOD4']['bit'] == 0)]
    
    似乎有效。我昨天试的时候不知道为什么不行


    是否有可能将第二个标签(“bit”)留空?原始数据中的标签有时会有所不同(例如“位”、“位”或“无单位”)。

    什么是
    print(df.columns)
    ?相当多-但这个摘录可能有帮助:print(data.columns)多索引(levels=['TMOD1'、'TMOD2'、(…)'、[(…)'SEC'、'unitless'、'bit'、(…]),labels=[43,73,(…])]