Я читаю несколько файлов csv, в которых заголовки столбцов довольно раздражают: они содержат пробелы, табуляции и т. д.
A B C D E
CD E 300 0 0 0
CD E 1071 0 0 0
K E 390 0 0 0
Я хочу прочитать файл, а затем удалить все пробелы и/или табуляции из имен столбцов. В настоящее время я делаю
import polars as pl
file_df = pl.read_csv(csv_file,
comment_prefix='#',
separator='\t')
file_df = file_df.rename(lambda column_name: column_name.strip())
Это «полярный» способ сделать это? Я не большой поклонник лямбда-выражений, но если единственное другое решение — написать функцию только для этого, думаю, я буду придерживаться лямбда-выражений.
Кроме того, на сайте Polars GitHub есть открытая проблема с просьбой предоставить возможность пропускать пробелы при чтении файла.
Вы также можете удалить лямбду .rename(str.strip)
.rename() выполняет функцию на уровне Python. В Python str.strip(" foo ") — это еще один способ записи " foo ".strip(). На самом деле это не ответ, поскольку он работает только для определенных функций. (в предыдущем комментарии была досадная опечатка)






Решение состоит в том, чтобы использовать функцию, как вы показали.
Однако в случае .strip() без аргументов его можно немного упростить.
Другой способ написать полосу — использовать str.strip().
>>> " A ".strip()
# 'A'
>>> str.strip(" A ")
# 'A'
str.strip и lambda в этом случае делают то же самое:
one = lambda column: column.strip()
two = str.strip
>>> one(" A ")
# 'A'
>>> two(" A ")
# 'A'
df.rename() запускает функцию на уровне Python, то есть мы можем передать str.strip напрямую.
import polars as pl
csv = b"""
A \t B \t C
1\t2\t3
4\t5\t6
"""
df = pl.read_csv(csv, separator = "\t")
>>> df.columns
# [' A ', ' B ', ' C']
>>> df.rename(str.strip).columns
# ['A', 'B', 'C']
>>> df.rename(str.lower).columns
# [' a ', ' b ', ' c']
Это полезно только в том случае, если вы вызываете функции без дополнительных аргументов.
Для чего-то более сложного вам нужно будет использовать lambda (или def).
Если вы действительно хотите сохранить его в семье полярников, вы можете сделать
df.columns=pl.Series(df.columns).str.strip_chars()
Мне кажется, это идиоматический полярный код.