获取在一列c,中具有向量的csv

问题描述

我当时使用R来获取数据,但是我发现自己不得不改用python。 csv文件已存储为sf数据帧,其中列几何同时存储了long和lat。 在我的文件中,我具有以下结构:

a,geometry,b
50,c(-95.11,10.19),32.24
60,c(-95.12,10.27),22.79
70,c(-95.13,10.28),14.91
80,c(-95.14,10.33),18.35
90,c(-95.15,10.5),28.35
99,c(-95.16,10.7),48.91

这里的目的是在读取文件的同时知道c(-95.11,10.19)是lon和lat两个值,因此可以将它们存储在两个不同的列中。但是,将分隔符包含在也不是字符串的值中,确实很难做到这一点。

预期输出应为:

a,long,lat,-95.11,10.19,-95.12,10.27,-95.13,10.28,-95.14,10.33,-95.15,10.5,-95.16,10.7,48.91

解决方法

这项工作(输入文件:data.csv;输出文件:data_out.csv):

import csv

with open('data.csv','r') as fin,open('data_out.csv','w') as fout:
    reader,writer = csv.reader(fin),csv.writer(fout)
    next(reader)
    writer.writerow(['a','long','lat','b'])
    for row in reader:
        row[1] = row[1][2:]
        row[2] = row[2][1:-1]
        writer.writerow(row)

在示例输出中,第二列之后为空白:这是故意的吗?另外,您的示例输入在第一行之后的第二行中有一个双,吗?

,

如果您正在寻找基于R的解决方案,则可以考虑将基于{sf}的几何列中的坐标提取到常规列中,并进行相应的保存。

考虑以下示例,它基于北卡罗来纳州的三个半随机城市:

library(sf)
library(dplyr)

cities <- data.frame(name = c("Raleigh","Greensboro","Wilmington"),x = c(-78.633333,-79.819444,-77.912222),y = c(35.766667,36.08,34.223333)) %>% 
  st_as_sf(coords = c("x","y"),crs = 4326)

cities # a class sf data.frame
Simple feature collection with 3 features and 1 field
geometry type:  POINT
dimension:      XY
bbox:           xmin: -79.81944 ymin: 34.22333 xmax: -77.91222 ymax: 36.08
geographic CRS: WGS 84
        name                   geometry
1    Raleigh POINT (-78.63333 35.76667)
2 Greensboro    POINT (-79.81944 36.08)
3 Wilmington POINT (-77.91222 34.22333)

mod_cit <- cities %>% 
  mutate(long = st_coordinates(.)[,1],lat = st_coordinates(.)[,2]) %>% 
  st_drop_geometry()

mod_cit # a regular data.frame
        name      long      lat
1    Raleigh -78.63333 35.76667
2 Greensboro -79.81944 36.08000
3 Wilmington -77.91222 34.22333