如果列包含字符串,则保留列



这已经回答了类似的如何保持一行,如果任何列包含特定的子字符串?然而,我的问题涉及多个数据框架内的列表,这是一个不同的设置到另一个帖子。另外,我想保留列而不是行。

我已经尝试了所有替代的答案在那篇文章中,不能让我的问题成功地工作。下面是我正在处理的内容:

import pandas as pd
nm = ["Sepal.Length" ,"Sepal.Width" , "Petal.Length", "Petal.Width", "Species"]
def tbl(data):
data = [data[x:] + data[:x] for x in range(1, len(data)+1)]
df = pd.DataFrame(data)
return df
df_tbl = tbl(nm)
ls_comb = [df_tbl.loc[0:i] for i in range(0, len(df_tbl))]
reply_pred=[i.apply(lambda x: x.str.replace('Species', 'log(Species)')) for i in ls_comb]

这是我尝试过的:

[i[i.apply(lambda x: x.str.contains('Sepal.Width', na=False))] for i in reply_pred]
[             0    1    2    3    4
0  Sepal.Width  NaN  NaN  NaN  NaN,
0    1    2    3            4
0  Sepal.Width  NaN  NaN  NaN          NaN
1          NaN  NaN  NaN  NaN  Sepal.Width,
0    1    2            3            4
0  Sepal.Width  NaN  NaN          NaN          NaN
1          NaN  NaN  NaN          NaN  Sepal.Width
2          NaN  NaN  NaN  Sepal.Width          NaN,
0    1            2            3            4
0  Sepal.Width  NaN          NaN          NaN          NaN
1          NaN  NaN          NaN          NaN  Sepal.Width
2          NaN  NaN          NaN  Sepal.Width          NaN
3          NaN  NaN  Sepal.Width          NaN          NaN,
0            1            2            3            4
0  Sepal.Width          NaN          NaN          NaN          NaN
1          NaN          NaN          NaN          NaN  Sepal.Width
2          NaN          NaN          NaN  Sepal.Width          NaN
3          NaN          NaN  Sepal.Width          NaN          NaN
4          NaN  Sepal.Width          NaN          NaN          NaN]
但是,预期的输出应该返回整个列,例如:
[             0   
0  Sepal.Width  
0    4
0  Sepal.Width  Sepal.Length
1  Petal.Length  Sepal.Width,
0    3             4
0  Sepal.Width  log(Species)  Sepal.Length
1  Petal.Length Sepal.Length  Sepal.Width
2  Petal.Width  Sepal.Width   Petal.Length,
.
.
.

您可以使用遮罩df.columns,然后使用df.loc来选择剩余的列

dfs = [df.loc[:, df.columns[df.apply(lambda col: col.str.contains('Sepal.Width')).any()]]
for df in reply_pred]
for df in dfs:
print(df, 'n')
0
0  Sepal.Width
0             4
0   Sepal.Width  Sepal.Length
1  Petal.Length   Sepal.Width
0             3             4
0   Sepal.Width  log(Species)  Sepal.Length
1  Petal.Length  Sepal.Length   Sepal.Width
2   Petal.Width   Sepal.Width  Petal.Length
0             2             3             4
0   Sepal.Width   Petal.Width  log(Species)  Sepal.Length
1  Petal.Length  log(Species)  Sepal.Length   Sepal.Width
2   Petal.Width  Sepal.Length   Sepal.Width  Petal.Length
3  log(Species)   Sepal.Width  Petal.Length   Petal.Width
0             1             2             3             4
0   Sepal.Width  Petal.Length   Petal.Width  log(Species)  Sepal.Length
1  Petal.Length   Petal.Width  log(Species)  Sepal.Length   Sepal.Width
2   Petal.Width  log(Species)  Sepal.Length   Sepal.Width  Petal.Length
3  log(Species)  Sepal.Length   Sepal.Width  Petal.Length   Petal.Width
4  Sepal.Length   Sepal.Width  Petal.Length   Petal.Width  log(Species)

最新更新