我有一个火花数据帧,只想删除最后一列。
我试过了
df.drop(df.columns.last)`
但出现错误:“list”对象没有属性“last”。
我还尝试了:
df = df.drop(df.columns[-1])
但这会删除所有与last同名的列。
使用Spark 2.4
这是一种可以按索引删除任何列的方法。
假设您有以下数据帧:
np.random.seed(1)
data = np.random.randint(0, 10, size=(3,3))
df = spark.createDataFrame(data.astype(int).tolist(), ["a", "b", "a"])
df.show()
#+---+---+---+
#| a| b| a|
#+---+---+---+
#| 5| 8| 9|
#| 5| 0| 0|
#| 1| 7| 6|
#+---+---+---+
首先保存原始列名。
colnames = df.columns
print(colnames)
#['a', 'b', 'a']
然后使用range
重命名DataFrame中的所有列,以便新列名是唯一的(它们将只是列索引)。
df = df.toDF(*map(str, range(len(colnames))))
print(df.columns)
#['0', '1', '2']
现在,删除最后一列,并使用第一步中保存的列名重命名这些列(不包括最后一列)。
df = df.drop(df.columns[-1]).toDF(*colnames[:-1])
df.show()
#+---+---+
#| a| b|
#+---+---+
#| 5| 8|
#| 5| 0|
#| 1| 7|
#+---+---+
您可以轻松地将其扩展到任何索引,因为我们使用范围重命名。
出于解释目的,我将其分解为步骤,但您也可以更紧凑地执行此操作,如下所示:
colnames = df.columns
df = df.toDF(*map(str, range(len(colnames))))\
.drop(str(len(colnames)-1))\
.toDF(*colnames[:-1])
最好按名称删除列。一些操作(如withColumn)可以更改列的顺序。如果一个数据帧有重复的名称,则通过数据帧引用该列。column\u name(列名称)而不是“columnName”(列名称),这会导致歧义。
df3 = df1.join(df2, df1.c1 == df2.c1).drop(df2.c1)
一般而言,df。删除(df.columnName)
假设我们有一个列为col1、col2、col3、col4的数据帧。现在,在保存df时,我想使用col2进行分区,并且我将保存的最终df不应该有col2。所以最终的df应该是col1、col3、col4。关于如何实现这一点,有什么建议吗?
我想将以下数据框的第1列重命名为“Ref”。我有很多列,因此无法重命名每个列或为每个列设置名称。 这是数据帧 现在我想将第一列重命名为'Ref'。我试过这个 它重命名所有标题与列[1]相似的列。
问题内容: 如何在Python中按索引从列表中删除元素? 我找到了方法,但是说我想删除最后一个元素,该怎么做?似乎默认的搜索列表,但是我不希望执行任何搜索。 问题答案: 使用并指定要删除的元素的索引:
我有一个包含大量列的Spark数据框架。我想从中删除两列以获得新的数据帧。 如果列更少,我可以在API中使用select方法,如下所示: 但是既然从长列表中挑选列是一项乏味的任务,有解决方法吗?
我有麻烦重命名基于csv的数据帧的标头。 我得到了以下数据帧:df1: 现在我想根据csv文件更改列名(第一行),如下所示: 因此,我期望数据帧如下所示: 有什么想法吗?感谢您的帮助:)
本文向大家介绍如何通过R中data.table中的列名删除列?,包括了如何通过R中data.table中的列名删除列?的使用技巧和注意事项,需要的朋友参考一下 我们可以通过将列设置为NULL来实现 示例 删除一列x 删除两列