我有 2 级(区)shapefile、shx、shp、prj 和 dbf。我想根据 csv 文件中的值对区域进行着色。为此,我需要知道 shapefile 中的地区名称,以便它们与 csv 文件匹配。当我在 python 中打印 shapefile 时,我得到了前几个区域、点和最后几个区域。怎样才能得到所有的区呢?我的Python代码如下
import geopandas as gpd
map_df = gpd.read_file("Shapefiles/geoBoundaries-ZMB-ADM2-all/geoBoundaries-ZMB-ADM2.shx")
print(str(map_df))
file = open("DistNames.txt","w")
for i in map_df:
file.write(str(i))
file.close()
file.write 命令仅写入标头。 “print(str(map_df))”打印以下内容
shapeName shapeISO shapeID shapeGroup shapeType geometry
0 Chadiza None 96606910B77235415839099 ZMB ADM2 POLYGON ((32.74355 -13.97731, 32.74352 -13.977...
1 Chama None 96606910B58575447882030 ZMB ADM2 POLYGON ((32.98907 -10.33498, 32.98921 -10.334...
2 Chasefu None 96606910B66491549150910 ZMB ADM2 POLYGON ((32.49527 -12.11955, 32.49512 -12.119...
3 Chavuma None 96606910B79487679146559 ZMB ADM2 POLYGON ((21.99621 -13.43440, 21.99863 -13.278...
4 Chembe None 96606910B75660185812839 ZMB ADM2 POLYGON ((28.84617 -11.51781, 28.84644 -11.517...
.. ... ... ... ... ... ...
111 Sioma None 96606910B9791848622327 ZMB ADM2 POLYGON ((23.03060 -16.08061, 23.03080 -16.080...
112 Solwezi None 96606910B41698448274652 ZMB ADM2 POLYGON ((26.35282 -12.64015, 26.35057 -12.636...
113 Vubwi None 96606910B21898239615406 ZMB ADM2 POLYGON ((32.64327 -14.20251, 32.64332 -14.202...
114 Zambezi None 96606910B34519400934586 ZMB ADM2 POLYGON ((21.99621 -13.43440, 21.99962 -13.435...
115 Zimba None 96606910B26636319118677 ZMB ADM2 POLYGON ((26.96850 -17.33118, 26.96862 -17.332...
[116 rows x 6 columns]
寻求帮助提取所有形状名称,以进行筛选或写入文件中。
您的 Python 代码面临的问题是您试图将 DataFrame 的列名称写入文件,而不是特定列的值(在本例中为地区名称)。要使用 GeoPandas 从 shapefile 中提取并保存地区名称,您需要专门访问包含地区名称的列并将这些值写入文件。
根据您的描述,包含地区名称的列似乎可能被标记为
shapeName
。以下是您可以修改代码以提取所有地区名称并将其保存到文件中的方法:
import geopandas as gpd
# Load shapefile using GeoPandas
map_df = gpd.read_file("Shapefiles/geoBoundaries-ZMB-ADM2-all/geoBoundaries-ZMB-ADM2.shx")
# Assuming the district names are in the 'shapeName' column
district_names = map_df['shapeName']
# Write district names to a file
with open("DistNames.txt", "w") as file:
for name in district_names:
file.write(name + '\n') # Write each name on a new line
此代码将创建一个名为
DistNames.txt
的文件,其中每一行包含 shapefile 中的一个地区的名称。确保列名称 shapeName
与 shapefile 中包含地区名称的列完全匹配。如果列名称不同,您应该在 shapefile 中将 'shapeName'
替换为正确的列名称。