使用熊猫根据列删除整个行

时间:2018-10-28 16:10:50

标签: python python-2.7 pandas

我有一个数据集(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

2 个答案:

答案 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')

希望这个答案可以解决您的问题!

相关问题