如何通过首行含'Jack'子串筛选DataFrame列(不使用列名)
需求说明
需要筛选DataFrame的列,但不依赖列名,而是基于第0行(数据首行)中包含"Jack"子串的列进行筛选。当前已有通过指定列名实现的代码,需修改为按行内容筛选的方式。
原实现代码
import pandas as pd data = [ ["A","Jack 001","Alice xyz","John","Jack xxx"], ["B",0,2,3,4], ["C",2,4,5,6], ["D",3,1,4,5] ] df = pd.DataFrame(data,columns=['v0','v1','v2','v3','v4']) print(df) df1 = df[['v1','v4']] print(df1)
原输出结果
v0 v1 v2 v3 v4 0 A Jack 001 Alice xyz John Jack xxx 1 B 0 2 3 4 2 C 2 4 5 6 3 D 3 1 4 5 v1 v4 0 Jack 001 Jack xxx 1 0 4 2 2 6 3 3 5
解决方案代码
import pandas as pd data = [ ["A","Jack 001","Alice xyz","John","Jack xxx"], ["B",0,2,3,4], ["C",2,4,5,6], ["D",3,1,4,5] ] df = pd.DataFrame(data,columns=['v0','v1','v2','v3','v4']) print("原DataFrame:") print(df) # 基于第0行内容筛选包含"Jack"的列 jack_columns = df.iloc[0].str.contains("Jack") filtered_df = df.loc[:, jack_columns] print("\n筛选后的结果:") print(filtered_df)
代码说明
df.iloc[0]:提取DataFrame的第0行数据.str.contains("Jack"):检查该行每个元素是否包含"Jack"子串,返回一个布尔数组,True表示对应列符合条件df.loc[:, jack_columns]:通过布尔数组筛选列,保留所有符合条件的列
筛选后输出结果
原DataFrame: v0 v1 v2 v3 v4 0 A Jack 001 Alice xyz John Jack xxx 1 B 0 2 3 4 2 C 2 4 5 6 3 D 3 1 4 5 筛选后的结果: v1 v4 0 Jack 001 Jack xxx 1 0 4 2 2 6 3 3 5
内容的提问来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

