使用Pandas删除DataFrame第4行含特定子串的列
解决方案
直接基于第4行(索引为4)的值筛选列即可,不需要复杂的正则匹配,步骤如下:
- 获取第4行的所有列值:
row_4 = df.iloc[4] - 筛选出第4行值为
'e'或'e.Description'的列:keep_cols = row_4[(row_4 == 'e') | (row_4 == 'e.Description')].index - 保留这些列,得到目标DataFrame:
df_filtered = df[keep_cols]
完整代码示例
import pandas as pd # 模拟你的原始DataFrame(根据示例构造) data = [ ['a', pd.NA, 'empty', 'empty', 'empty'], ['b', pd.NA, '', '', ''], ['c', pd.NA, '', '', ''], ['d', pd.NA, '', '', ''], ['e', 'e.Description', 'e.Value', 'e.Attribute', 'e.Variable'], ['f', pd.NA, pd.NA, pd.NA, pd.NA] ] df = pd.DataFrame(data) # 执行筛选 row_4 = df.iloc[4] keep_cols = row_4[(row_4 == 'e') | (row_4 == 'e.Description')].index df_filtered = df[keep_cols] print(df_filtered)
为什么之前的方法没生效?
你之前用df.filter(regex='.Value')的问题是:正则里的.是通配符,需要转义成\.Value才能匹配实际的点号,但更核心的问题是,这种方式是匹配列名,而你的列名是默认的数字索引,根本不包含这些子串,所以完全筛选不到目标列。基于第4行的值筛选才是精准匹配你需要保留的列的方式。
内容的提问来源于stack exchange,提问作者AMetanoia
相关产品推荐
相关产品推荐

