数据框列表,如果行包含特殊字符串,则删除数据框列(列的名称不同)

时间:2020-10-18 08:44:16

标签: python pandas

我所拥有的是数据帧列表。

需要注意的重要一点是,数据框的形状在2至7列之间有所不同,这些列也被命名为该列的0和len之间(例如df1有5个列,分别命名为0、1、2、3、4等等。df2有4个名为0、1、2、3的列)

我想检查一列中的行是否包含某个字符串,然后删除该列。

list_dfs1=[df1,df2,df3...df100]

我到目前为止所做的是以下内容,并且我得到一个错误,即第5列不在轴上(对于某些DF在那儿)

for i, df in enumerate(list_dfs1):
    for index,row in df.iterrows():
        if np.where(row.str.contains("DEC")):
            df.drop(index, axis=1)

任何建议。

3 个答案:

答案 0 :(得分:2)

您可以尝试:

for df in list_dfs:
    for col in df.columns:
        # If you are unsure about column types, cast column as string:
        df[col] = df[col].astype(str)
        # Check if the column contains the string of interest
        if df[col].str.contains("DEC").any():
            df.drop(columns=[col], inplace=True)

如果您知道所有列都是字符串类型,则不必实际执行df[col] = df[col].astype(str)

答案 1 :(得分:1)

您可以编写一个自定义函数来检查数据框是否具有模式。您可以将pd.Series.str.containspd.Series.any

一起使用
def func(s):
    return s.str.contains('DEC').any()

list_df = [df.loc[:, ~df.apply(func)] for df in list_dfs1]

答案 2 :(得分:0)

我会采取另一种方法。我会将列表连接到一个数据框中,然后删除查找字符串的列

import pandas as pd
df = pd.concat(list_dfs1)

让我们说您的条件是用"DEC"消除任何一列

df.mask(df == "DEC").dropna(axis=1, how="any")