我有一个数据集(csv),格式为:
ship_id,speed,LON,LAT,
00x1,7.4,2.17105,41.31353
00x1,7.4,1.935983,41.04712
00x1,7.4,-5.381285,36.11647
,我有一个包含以下几点的经纬度的列表:
for i in range(len(array_points2)):
print array_points2[i].lat, array_points2[i].lon
输出:
1.935983 41.04712
-0.9617717 37.51845
14.70076 35.76273
我想遍历列表中的元素,并且如果纬度和手数与任何行的LON,LAT相同,则此行将被删除。
到目前为止,我的代码不起作用:
df = pd.read_csv('/home/repos/master/testdat.csv')
for i in range(len(array_points2)):
df[df.LAT != array_points2[i].lat]
df.to_csv('/home/antonis/master/testdat_new.csv', sep='\t')'
还必须将结果写入另一个文件吗?删除不正确吗?
预期的输出结果是:
ship_id,speed,LON,LAT,
00x1,7.4,2.17105,41.31353
00x1,7.4,-5.381285,36.11647
答案 0 :(得分:0)
您可以这样做,首先将点数组转换为列表列表:
list_lon_lat =[]
for point in array_points2:
list_lon_lat.append([point.lon, point.lat])
然后为词典列表构建一个数据框并重命名列,以使其与原始数据框匹配:
df_lonlat = pd.DataFrame(list_lon_lat, columns=['LON','LAT'])
最后,从原始数据框中删除原始数据和lonlat数据框的交点。
df.drop(df.merge(df_lonlat).index, inplace=True)
答案 1 :(得分:0)
您可以尝试这种方法。
首先将列表转换为数据框。
dfy = pd.DataFrame(array_points2, columns=['ship_id','speed','LON','LAT'])
然后删除原始数据框的LON或LAT与现在是数据框的列表的LON或LAT相同的行。
df = df.drop(df[((df.LON == dfy.LON) | (df.LAT == dfy.LAT))].index)
输出为-
ship_id,speed,LON,LAT,
00x1,7.4,2.17105,41.31353
00x1,7.4,-5.381285,36.11647
然后使用以下代码将Dataframe df保存为csv文件-
df.to_csv(file_name, sep=',', encoding='utf-8')
希望这个答案可以解决您的问题!