我所拥有的是数据帧列表。
需要注意的重要一点是,数据框的形状在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)
任何建议。
答案 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.contains
与pd.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")