У меня есть фрейм данных python polars как-
df_pol = pl.DataFrame({'test_names':[['Mallesham','','Bhavik','Jagarini','Jose','Fernando'],
['','','','ABC','','XYZ']]})
Я хотел бы получить количество элементов из каждого списка в поле test_names, не учитывая пустые значения.
df_pol.with_column(pl.col('test_names').arr.lengths().alias('tot_names'))
Здесь учитываются пустые строки, поэтому мы видим 6 имен в списке-2. на самом деле у него всего два имени.
требуемый вывод как:
Вы можете использовать arr.eval
для запуска любого полярного выражения для элементов списка. В выражении arr.eval
вы можете pl.element()
ссылаться на элемент списка, а затем применять выражение.
Затем мы просто используем выражение filter
, чтобы удалить ненужные значения.
df = pl.DataFrame({
"test_names":[
["Mallesham","","Bhavik","Jagarini","Jose","Fernando"],
["","","","ABC","","XYZ"]
]
})
df.with_column(
pl.col("test_names").arr.eval(pl.element().filter(pl.element() != ""))
)
shape: (2, 1)
┌─────────────────────────────────────┐
│ test_names │
│ --- │
│ list[str] │
╞═════════════════════════════════════╡
│ ["Mallesham", "Bhavik", ... "Fer... │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ ["ABC", "XYZ"] │
└─────────────────────────────────────┘
Хороший вопрос — в основном мы хотим применить фильтр к каждому элементу списка.
Мы делаем это с помощью arr.eval
, что позволяет нам выполнять операции внутри Series
в каждой строке и использовать pl.element
в качестве прокси для Series
в каждой строке.
(
df_pol
.with_column(
pl.col('test_names').arr.eval(
pl.element().filter(pl.element().str.lengths()>0)
)
.arr.lengths()
.alias('tot_names')
)
)