Удалить всю строку на основе столбца с помощью панд - PullRequest
0 голосов
/ 28 октября 2018

У меня есть набор данных (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

Я хочу перебрать элементы списка, и если lat и lot совпадают с 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 голосов
/ 28 октября 2018

Вы можете попробовать этот подход.

Fist преобразует список в Dataframe.

dfy = pd.DataFrame(array_points2, columns=['ship_id','speed','LON','LAT'])

Затем отбросьте строки, где LON или LAT вашего исходного Dataframe такие же, как у вашегоlist, который теперь является Dataframe.

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

Надеюсь, этот ответ решит вашу проблему!

0 голосов
/ 28 октября 2018

Вы можете сделать это следующим образом: сначала преобразуйте свой массив точек в список списков:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...