Странная ошибка «ядро умерло» в pandas df.to_excel(), вызванная geopandasPython

Программы на Python
Ответить
Anonymous
 Странная ошибка «ядро умерло» в pandas df.to_excel(), вызванная geopandas

Сообщение Anonymous »

Когда pandas.read_excel(), df.to_excel(), geopandas.read_file() и gdf.to_file() вызываются в определенном порядке в разных средах, pd.read_excel() иногда вызывает ошибку «Ядро умерло».
Я уже пробовал читать и писать с помощью различных доступных механизмов - похоже, разницы нет.
ВАЖНО: проблемы не будет, если я никогда не сохраняю файл .gpkg! Если приведенный ниже код используется с .geojson, все в порядке.

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

"""The script causes the kernel to die in certain environments,
and I cannot figure out why it happens.
"""
import geopandas as gpd
import pandas as pd
import time

# gpd_engine="pyogrio"
# gpd_engine="fiona"
gpd_engine=None

print("Write a DataFrame")
pd.DataFrame({"A": [1, 2]}).to_excel("test.xlsx",
engine='openpyxl',
# engine='xlsxwriter',
)
print("OK")

print("Read a DataFrame")
pd.read_excel("test.xlsx")
print("OK")

df = pd.DataFrame({'col1': ['name1', 'name2'],
'wkt': ['POINT (1 2)', 'POINT (2 1)']})
gs = gpd.GeoSeries.from_wkt(df['wkt'])
gdf = gpd.GeoDataFrame(df, geometry=gs, crs="EPSG:4326")

print("Write a GeoDataFrame")
geofile = "geopandas-test.gpkg"  # This causes the kernel error later
# geofile = "geopandas-test.geojson"  # This is always fine
gdf.to_file(geofile, engine=gpd_engine)
print("OK")

print("Read a GeoDataFrame")
gpd.read_file(geofile, engine=gpd_engine)
print("OK")

print("Write a DataFrame")
time.sleep(1)  # Without sleep, the previous print() gets lost sometimes

# Kernel death happens here sometimes

pd.DataFrame({"A": [1, 2]}).to_excel("test.xlsx",
# engine='openpyxl',
# engine='xlsxwriter',
)
print("OK")

print("Read a DataFrame")
time.sleep(1)  # Without sleep, the previous print() gets lost sometimes
# Kernel death happens here sometimes
pd.read_excel("test.xlsx")
print("OK")

print("Test finished successfully")
Самый полезный ответ (я думаю) на вопрос ChatGPT:

Написание GeoPackage загружает драйвер GPKG/SQLite GDAL (собственные библиотеки C).
Эти собственные библиотеки изменяют состояние всего процесса (блокировки, обработчики или поведение потока/распределителя), что позже конфликтует с путем кода pandas/openpyxl использует для записи XLSX, и это столкновение приводит к сбою интерпретатора.
GeoJSON избегает конкретного пути кода GPKG/SQLite, который вызывает конфликт, так что все в порядке.

У меня есть минимальная среда, которая работает нормально, и «полная» среда, которая мне нужна для других целей, где возникает проблема. С Ubuntu всегда все в порядке, проблема только в Windows. Различные версии Python, похоже, не имеют значения.
Я создал репозиторий GitHub для воспроизведения проблемы и сужения пакетов, вызывающих ее.
https://github.com/jnettels/kernel-death-test
Я попросил ChatGPT написать одно задание рабочего процесса для каждого дополнительного пакета, который мне нужен в моей производственной среде. Это тоже не помогло. Все они в порядке, за исключением «полного» списка пакетов, установленного из файла среды:
https://github.com/jnettels/kernel-deat ... 0166928359
Я думаю, теперь все сводится к каналам, используемым для установки (кстати, в данном случае я использую conda.)
Вот два случая:

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

-c defaults -c conda-forge
работает

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

-c conda-forge
не работает
Установка из файла среды ведет себя иначе, чем установка conda all-my-packages-as-a-list. Но мне также интересно, меняется ли это в зависимости от того, как используется вспомогательное действие conda.
Я нарушаю ограничения на количество символов, показывая выходные данные

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

conda info
и список conda
Это может быть полезным рабочим процессом для изоляции проблемы между практически идентичными настройками:
https://github.com/jnettels/kernel-deat ... 7900276206
Он также показывает информацию о пакете и предоставляет ее в качестве артефакта загрузки.
Есть ли какой-нибудь совет, как поступить?

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

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

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

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

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

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