Вот подход, который вы можете использовать для удаления любого столбца по индексу.
Предположим, у вас был следующий DataFrame:
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']
Затем переименуйте все столбцы в DataFrame , используя range
, чтобы новые имена столбцов были уникальными (они просто будут индексами столбцов).
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|
#+---+---+
Вы можете легко расширить это на любой index, так как мы переименовали, используя range
.
Я разбил его на шаги для пояснения, но вы также можете сделать это более компактно следующим образом:
colnames = df.columns
df = df.toDF(*map(str, range(len(colnames))))\
.drop(str(len(colnames)-1))\
.toDF(*colnames[:-1])