喻承龙CHENGLONG YU全部文章 ↗
教程

Python Convert CSV to Shapefile

使用Python处理csv文件并转为shapefile

要准备

具体实现

思想是这样的

  1. 将要转化的csv文件放到List里
  2. 使用for循环遍历
  3. 在for循环内
    1. 使用pandas读入csv
    2. 选取需要进行计算的列赋值给csvFileCal
    3. 将NaN设置为0(这是我此处的计算需要)
    4. 再将算出的结果添加到csvFile末尾,这样既保留了NaN的值,又计算出了正确的结果(因为在计算中如果具有NaN,计算结果也会是NaN)
    5. 将DataFrame转换为GeoDataFrame(这里仅有点对象,如果你还包含面对象的话还需要考虑别的方法)
    6. 设定好坐标系为WGS84(espg:4326)
    7. 调用GeoPandas的方法输出为shapefile文件
import pandas as pd
import geopandas as gpd

# The code below is used to convert the csv file into a shapefile. nameList = [‘india&Pakistan91_95’, ‘india&Pakistan96_00’, ‘india&Pakistan01_05’, ‘india&Pakistan06_10’, ‘india&Pakistan11_15’, ‘india&Pakistan16_20’]

for name in nameList: csvpath = r“D:\Desktop\StuInnovate\data\GTD\筛选{}.csv”.format(name) csvFile = pd.read_csv(csvpath)

csvFileCal <span class="token operator">=</span> csvFile<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">'latitude'</span><span class="token punctuation">,</span> <span class="token string">'longitude'</span><span class="token punctuation">,</span><span class="token string">'nkill'</span><span class="token punctuation">,</span><span class="token string">'nwound'</span><span class="token punctuation">,</span><span class="token string">'property'</span><span class="token punctuation">,</span><span class="token string">'nhostkid'</span><span class="token punctuation">]</span><span class="token punctuation">]</span>
csvFileCal<span class="token punctuation">.</span>fillna<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> inplace<span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span> <span class="token comment">#将NaN设置为0</span>

csvFileCal<span class="token punctuation">[</span><span class="token string">'severeIndex'</span><span class="token punctuation">]</span> <span class="token operator">=</span> csvFileCal<span class="token punctuation">[</span><span class="token string">'nkill'</span><span class="token punctuation">]</span> <span class="token operator">+</span> csvFileCal<span class="token punctuation">[</span><span class="token string">'nwound'</span><span class="token punctuation">]</span> <span class="token operator">+</span> csvFileCal<span class="token punctuation">[</span><span class="token string">'property'</span><span class="token punctuation">]</span> <span class="token operator">+</span> csvFileCal<span class="token punctuation">[</span><span class="token string">'nhostkid'</span><span class="token punctuation">]</span>

csvFile<span class="token punctuation">[</span><span class="token string">'severeIndex'</span><span class="token punctuation">]</span> <span class="token operator">=</span> csvFileCal<span class="token punctuation">[</span><span class="token string">'severeIndex'</span><span class="token punctuation">]</span>
geoGDF <span class="token operator">=</span> gpd<span class="token punctuation">.</span>GeoDataFrame<span class="token punctuation">(</span>csvFile<span class="token punctuation">,</span> geometry<span class="token operator">=</span>gpd<span class="token punctuation">.</span>points_from_xy<span class="token punctuation">(</span>csvFile<span class="token punctuation">.</span>longitude<span class="token punctuation">,</span> csvFile<span class="token punctuation">.</span>latitude<span class="token punctuation">)</span><span class="token punctuation">)</span>
geoGDF<span class="token punctuation">.</span>crs <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string">'init'</span><span class="token punctuation">:</span> <span class="token string">'epsg:4326'</span><span class="token punctuation">}</span>
geoGDF<span class="token punctuation">.</span>to_file<span class="token punctuation">(</span><span class="token string">r"D:\Desktop\StuInnovate\data\GTD\shp\{}.shp"</span><span class="token punctuation">.</span><span class="token builtin">format</span><span class="token punctuation">(</span>name<span class="token punctuation">)</span><span class="token punctuation">,</span> driver<span class="token operator">=</span><span class="token string">'ESRI Shapefile'</span><span class="token punctuation">)</span>