簡體   English   中英

使用熊貓根據列刪除整個行

[英]Delete entire row based on column using 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

您可以通過以下方式做到這一點,首先將點數組轉換為列表列表:

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)

您可以嘗試這種方法。

拳頭將列表轉換為數據框。

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

希望這個答案能解決您的問題!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM