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中任何字符串的列。
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
。
在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
。
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,列表中的每个值都需要在单独的列中,我无法理解这一点。 试过这么做但没用 欢迎任何意见,谢谢
问题内容: 有没有一种简短的方法可以删除包含数字的列表中的所有字符串? 例如 会回来 问题答案: 没有正则表达式: