获取在一列 c(,) 中具有向量的 csv
fetching a csv that have a vector in one column c(,)
我使用 R 来准备我的数据,但我发现自己被迫改用 python。
csv 文件已存储为 sf 数据框,其中几何列存储经度和纬度。
在我的文件中,我有以下结构:
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) 是 2 个值 lon 和 lat,因此它们可以存储在两个不同的列中。然而,在值中有分隔符也不是字符串使得这真的很难做到。
预期的输出应该是:
a,long,lat,b
50,-95.11, 10.19,32.24
60,,-95.12, 10.27,22.79
70,-95.13, 10.28,14.91
80,-95.14, 10.33,18.35
90,-95.15, 10.5,28.35
99,-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}
的几何列中的坐标提取到常规列中,并相应地保存。
考虑这个例子,建立在三个 semi-random 北卡罗来纳州城市:
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
我使用 R 来准备我的数据,但我发现自己被迫改用 python。 csv 文件已存储为 sf 数据框,其中几何列存储经度和纬度。 在我的文件中,我有以下结构:
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) 是 2 个值 lon 和 lat,因此它们可以存储在两个不同的列中。然而,在值中有分隔符也不是字符串使得这真的很难做到。
预期的输出应该是:
a,long,lat,b
50,-95.11, 10.19,32.24
60,,-95.12, 10.27,22.79
70,-95.13, 10.28,14.91
80,-95.14, 10.33,18.35
90,-95.15, 10.5,28.35
99,-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}
的几何列中的坐标提取到常规列中,并相应地保存。
考虑这个例子,建立在三个 semi-random 北卡罗来纳州城市:
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