Поднимите недопустимый тип файла при записи фрейма данных в файл формы

#python #pandas #dataframe #shapefile #geopandas

Вопрос:

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

Вот код, который я использую для чтения данных. Все загружаемые файлы можно получить в этом zip-файле

 import pandas
import geopandas as gpd
import fiona
import numpy as np

#Reading in the existing shape file

df = gpd.read_file("TX_vtds_extra/TX_vtds_extra.shp")

#Read the scheme for the shape file

with fiona.open("TX_vtds_extra/TX_vtds_extra.shp") as f:
    input_schema = f.schema

#Read in data to append to dataframe and change column names

new_data = pandas.read_csv('2020_General_Election_VRTO.csv')

Gen_Elec_20_VRTO.rename(columns={'TotalTO':'TOTTO20','TotalVR':'TOTVR20'},inplace=True)


 

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

 #This will eventually be the input to the function

B=new_data
A=df
col_list = ['TOTVR20', 'TOTTO20']
list_len = len(col_list)

#Add new columns to dataframe
for col in col_list:
    A[col]=""

#Rearange columns so that geometry is last column in list
col = list(range(len(A.columns)-(list_len 1)))
col = col   list(range(len(A.columns)-list_len,len(A.columns)))
col.append(len(A.columns)-(list_len 1))
A=A[A.columns[col]]

#Map new info into existing dataframe using the 'CNTYVTD' identifiers

for index, row in A.iterrows():  
    mask = B['CNTYVTD']==row['CNTYVTD']
    if any(mask):
        temp = B[mask]
        for col in col_list:
            A.loc[index,col]=temp.iloc[0][col]
    else:
        for col in col_list:
            A.loc[index,col]=0
 

Наконец, код, используемый для записи нового фрейма данных в файл формы

 output_schema = input_schema
output_schema['properties']['TOTVR20'] = 'int:18'
output_schema['properties']['TOTTO20'] = 'int:18'

A.to_file("TX_vtds_extra_extra/TX_vtds_extra_extra.shp", schema=output_schema)
 

В этой последней строке кода я получаю сообщение об ошибке

Ошибка значения: Недопустимый тип поля <класс ‘numpy.int64’>

Недопустимый тип поля, по-видимому, содержится в новых столбцах, которые я добавил, потому что, если я напишу новый фрейм данных с удаленными новыми столбцами, используя ту же функцию, все будет работать гладко.

Комментарии:

1. Я не могу воспроизвести эту ошибку. Какие версии fiona и geopandas вы используете?