GeoPandas DataFrame, как разбить данные по строкам с геометрией

!unzip https://www2.census.gov/geo/tiger/GENZ2018/shp/cb_2018_us_ua10_500k.zip

Я использую приведенный выше набор данных для взрыва строк в фрейме данных geopandas.

# Read shapefile
test = gpd.read_file("cb_2018_us_ua10_500k")
# Split Name10 column to extract city & state 
test[['city', 'state_names']] = test['NAME10'].str.split(',', 1, expand=True)
# Remove trailing & leading spaces
test[['city', 'state_names']] = test[['city', 'state_names']].apply(lambda x: x.str.strip())

test.head()

    UACE10  AFFGEOID10  GEOID10 NAME10  LSAD10  UATYP10 ALAND10 AWATER10    geometry    city    state_names
0   88732   400C100US88732  88732   Tucson, AZ  75  U   915276150   2078695 MULTIPOLYGON (((-110.81345 32.11910, -110.7987...   Tucson  AZ
1   01819   400C100US01819  01819   Alturas, CA 76  C   4933312 16517   MULTIPOLYGON (((-120.54610 41.51264, -120.5459...   Alturas CA
2   22366   400C100US22366  22366   Davenport, IA--IL   75  U   357345121   21444164    MULTIPOLYGON (((-90.36678 41.53636, -90.36462 ...   Davenport   IA--IL
3   93322   400C100US93322  93322   Waynesboro, PA--MD  76  C   45455957    88872   MULTIPOLYGON (((-77.50746 39.71577, -77.50605 ...   Waynesboro  PA--MD
4   02548   400C100US02548  02548   Angola, IN  76  C   23646957    3913803 MULTIPOLYGON (((-85.01157 41.59300, -85.00589 ...   Angola  IN

Я пытаюсь взорваться state_names рядами

test.assign(state=test["state_names"].str.split("--")).explode('state')

Ошибка:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-47-5532b7b6cbdf> in <module>
----> 1 test.assign(state=city_geo["state_names"].str.split("--")).explode('state')

TypeError: explode() takes 1 positional argument but 2 were given

когда я пытаюсь обойтись без геометрии, это работает

test = test[['UACE10', 'AFFGEOID10', 'GEOID10', 'NAME10', 'LSAD10', 'UATYP10',
       'ALAND10', 'AWATER10', 'city', 'state_names']].head()

test.assign(state=test["state_names"].str.split("--")).explode('state')
UACE10  AFFGEOID10  GEOID10 NAME10  LSAD10  UATYP10 ALAND10 AWATER10    city    state_names state
0   88732   400C100US88732  88732   Tucson, AZ  75  U   915276150   2078695 Tucson  AZ  AZ
1   01819   400C100US01819  01819   Alturas, CA 76  C   4933312 16517   Alturas CA  CA
2   22366   400C100US22366  22366   Davenport, IA--IL   75  U   357345121   21444164    Davenport   IA--IL  IA
2   22366   400C100US22366  22366   Davenport, IA--IL   75  U   357345121   21444164    Davenport   IA--IL  IL
3   93322   400C100US93322  93322   Waynesboro, PA--MD  76  C   45455957    88872   Waynesboro  PA--MD  PA
3   93322   400C100US93322  93322   Waynesboro, PA--MD  76  C   45455957    88872   Waynesboro  PA--MD  MD
4   02548   400C100US02548  02548   Angola, IN  76  C   23646957    3913803 Angola  IN  IN

Как взорвать фрейм данных геопанды с помощью геометрии?

У меня все работает, как и ожидалось, при попытке воспроизвести ошибку. Выполняли ли вы какую-либо другую обработку city_geo перед попыткой взорвать столбец?

Frodnar 25.11.2022 13:05

Нет, никакой обработки не делал. Опечатка. Обновленный вопрос

Ailurophile 25.11.2022 13:12

Какую версию GeoPandas вы используете? В последней версии должно работать разнесение GeoDataFrame на негеометрический столбец.

joris 25.11.2022 23:19
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В этом случае данные могут быть считаны как фрейм данных, а затем после некоторой обработки преобразованы в фрейм данных geopandas.

import geopandas as gpd

url = 'https://www2.census.gov/geo/tiger/GENZ2018/shp/cb_2018_us_ua10_500k.zip'

test = gpd.read_file(url)
df = pd.DataFrame(test)

df[['city', 'state_names']] = df['NAME10'].str.split(',', 1, expand=True)
df = df.assign(state=df["state_names"].str.split("--")).explode('state')

# convert df to gdf
test = gpd.GeoDataFrame(df, geometry='geometry')

test.crs

выход

<Geographic 2D CRS: EPSG:4269>
Name: NAD83
Axis Info [ellipsoidal]:
- Lat[north]: Geodetic latitude (degree)
- Lon[east]: Geodetic longitude (degree)
Area of Use:
- name: North America - onshore and offshore: Canada - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon. Puerto Rico. United States (USA) - Alabama; Alaska; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Hawaii; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming. US Virgin Islands. British Virgin Islands.
- bounds: (167.65, 14.92, -47.74, 86.46)
Datum: North American Datum 1983
- Ellipsoid: GRS 1980
- Prime Meridian: Greenwich

Другие вопросы по теме