Мутация ячеек в большом кадре данных Polars (Python) с помощью iter_rows приводит к ошибке сегментации.Python

Программы на Python
Ответить
Anonymous
 Мутация ячеек в большом кадре данных Polars (Python) с помощью iter_rows приводит к ошибке сегментации.

Сообщение Anonymous »

У меня есть большой фрейм данных, который выглядит следующим образом:

Код: Выделить всё

df_large = pl.DataFrame({'x':['h1','h2','h2','h3'],
'y':[1,2,3,4],
'ind1':['0/0','1/0','1/1','0/1'],
'ind2':['0/1','0/2','1/1','0/0'] }).lazy()
df_large.collect()

Код: Выделить всё

|   x   |   y   | ind_1 | ind_2   |
|_______|_______|_______|_________|
| "h1"  |   1   | "0/0" |  '0/1'  |
| "h2"  |   2   | "1/0" |  '0/2'  |
| "h2"  |   3   | "1/1" |  '1/1'  |
| "h3"  |   4   | "0/1" |  '0/0'  |
df_large содержит координаты [x (str), y (int)] и строковые значения для множества людей [ind_1,ind_2,...]. Он очень большой, поэтому мне приходится читать файл CSV как ленивый фрейм данных. Кроме того, у меня есть небольшой фрейм данных, который выглядит следующим образом:

Код: Выделить всё

df_rep = pl.DataFrame({'x':['h1','h2','h2'],
'y':[1,2,2],
'ind':['ind1','ind1','ind2']})
df_rep

Код: Выделить всё

|   x   |   y   |  indvs  |
|_______|_______|_________|
| "h1"  |   1   | "ind_1" |
| "h2"  |   2   | "ind_1" |
| "h2"  |   2   | "ind_2" |
Мне нужно изменить значения столбцов ind_k в df_large, когда они появляются в df_rep.
Для этого я выполнил следующий код:

Код: Выделить всё

for row in df_rep.iter_rows():
df_large = df_large.with_columns(
pl.when(pl.col('x') == row[0],
pl.col('y')    == row[1])
.then(pl.col(row[2]).str.replace_all('(.)/(.)','./.'))
.otherwise(pl.col(row[2]))
.alias(row[2])
)
df_large.collect()

Код: Выделить всё

|   x   |   y   | ind_1 | ind_2   |
|_______|_______|_______|_________|
| "h1"  |   1   | "./." |  '0/1'  |
| "h2"  |   2   | "./." |  './.'  |
| "h2"  |   3   | "1/1" |  '1/1'  |
| "h3"  |   4   | "0/1" |  '0/0'  |
Этот метод, хотя и медленный, но работает для подмножества большего набора данных. Однако Polars выдает ошибку сегментации при применении к полному набору данных. Я надеялся, что вы поделитесь своим мнением о том, как решить эту проблему. Альтернативный метод достижения моей цели без использования iter_rows() был бы идеален!
Я новичок в Polars и буду очень признателен за любые отзывы. Я уже давно застрял в этом вопросе :(

Подробнее здесь: https://stackoverflow.com/questions/790 ... lds-segmen
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»