当前位置: 首页 > 知识库问答 >
问题:

Python:如何从包含列表中的值的dataframe中删除所有列?

杜英叡
2023-03-14
include_cols_path = sys.argv[5]
with open(include_cols_path) as f:
include_cols = f.read().splitlines()

include_cols是一个字符串列表

df1 = sqlContext.read.csv(input_path + '/' + lot_number +'.csv', header=True).toPandas()

df1是一个大文件的数据帧。我只想保留名称包含include_cols中任何字符串的列。

共有3个答案

堵存
2023-03-14
df1.loc[:, df1.columns.str.contains('|'.join(include_cols))]

例如:

df1 = pd.DataFrame(data=np.random.random((5, 5)), columns=list('ABCDE'))
include_cols = ['A', 'C', 'Z']
df1.loc[:, df1.columns.str.contains('|'.join(include_cols))]
>>>           A         C
    0  0.247271  0.761153
    1  0.390240  0.050055
    2  0.333401  0.823384
    3  0.821196  0.929520
    4  0.210226  0.406168

“|”.join(include_cols)部分将使用输入列表的所有元素创建一个条件。在上面的例子中,A | C | Z。如果使用列名上的.contains()方法在列名中包含一个元素,则此条件将为True

丁嘉庆
2023-03-14

pandas中这样做肯定是个骗局。但是,您似乎正在将spark数据帧转换为pandas数据帧

与其执行(昂贵的)收集操作,然后过滤您想要的列,不如使用选择()火花侧进行过滤:

df1 = sqlContext.read.csv(input_path + '/' + lot_number +'.csv', header=True)
pandas_df = df1.select(include_cols).toPandas()

您还应该考虑转换为熊猫DataFrame是否真的是您想要做的。你可以在熊猫中做的任何事情也可以在火花中完成。

编辑

我本来误解了你的问题。根据你的评论,我想这就是你要找的:

selected_columns = [c for c in df1.columns if any([x in c for x in include_cols])]
pandas_df = df1.select(selected_columns).toPandas()

说明:遍历df1中的列,并且只保留列名称中至少包含include_cols中的一个字符串的列。any()函数返回True,如果条件中至少有一个是True

齐乐
2023-03-14
final_cols = [col for col in df.columns.values if col in include_cols]
df = df[final_cols]
 类似资料:
  • 我有如下数据帧。 输入 输出 这怎么能在python中完成

  • 问题内容: 我只是python的初学者,我想知道是否可以从列表中删除所有整数值?例如文件像 删除后,我希望文档如下所示: 问题答案: 要删除所有整数,请执行以下操作: 但是,您的示例列表实际上并不包含整数。它仅包含字符串,其中一些仅由数字组成。要过滤掉它们,请执行以下操作: 交替:

  • 问题内容: 我有一个很大的数据集,我想删除包含值的列并返回一个新的数据框。我怎样才能做到这一点? 以下内容仅删除包含的单个列或行。 例如 在上述情况下,它将丢弃整个列,因为其值之一为空。 问题答案: 这是删除所有具有NULL值的所有列的一种可能的方法,以获取每列NULL值计数代码的源代码。 之前: 后: 希望这可以帮助!

  • 假设我有一张工作表--第一张--有5000多行(例如,每行“a”-“H”)。 在另一个工作表--第2号--中,我有一个“to-remove-list”--一个包含400个值的单列“a”,每个值包含字母数字字符串(例如:xxx1234)。 如果第'e'列包含“to-remove-list”(第2页的第'a'列)中的任何值,则必须删除第1页中的每一行。 删除整行,我的意思是删除该行并向上移动(不离开空

  • 我定义了一个配置,其中包含每个表的列列表,用作dedup键 例如:配置1: 这些列需要用作重复数据消除键。这个列表是动态的,有些表中有1个值,有些表中有2或3个值 我想做的是从这个列表中建立一个键列 我如何使这个动态的列表适用于任意数量的列。我试过这么做 为了实现这一点,我必须将列表转换为Df,列表中的每个值都需要在单独的列中,我无法理解这一点。 试过这么做但没用 欢迎任何意见,谢谢

  • 问题内容: 有没有一种简短的方法可以删除包含数字的列表中的所有字符串? 例如 会回来 问题答案: 没有正则表达式: