Удаление строк данных с использованием списка целых - PullRequest
0 голосов
/ 10 мая 2019

У меня есть датафрейм.Содержит df['article_id'].Я использую to_sql функцию с sqlalchemy для вставки в мою базу данных.Однако иногда у меня есть дубликаты записей, которые я хочу удалить перед вставкой.

Это мой список:

usedIDs = []
select_st = select([article_table])
res = conn.execute(select_st)
for _row in res:
    clean = int(_row[1])
    usedIDs.append(clean)

usedIDs

С выводом:

[1202623831,
 1747352473,
 1748645480,
 1759957596,
 1811054956,
 1812183879,
 1816974229,
 2450784233,
 2579244390,
 2580336884]

Что я 'я пробовал:

df[~df.isin(usedIDs)]
df.drop(usedIDs, axis=0)

И это не работает.Однако, когда я жестко кодирую его, как показано ниже, он работает.

df = df[~df.article_id.isin(['1202623831','1747352473'])]

Ошибка: unhashable или KeyError: not found in axis.

Как я могу отбросить строки из моего кадра данных, где df['article_id'] находится в usedIDs списке?

1 Ответ

1 голос
/ 10 мая 2019

Достаточно просто использовать «isin» в следующих примерах:

df
    one date
0   1   2019-05-10 06:00:16
1   2   2019-05-10 06:30:21
2   3   2019-05-10 07:00:03
3   4   2019-05-10 06:32:43
4   5   2019-05-10 07:33:31
5   6   2019-05-10 07:37:39:09
6   7   2019-05-10 07:49:01
7   8   2019-05-10 08:52:05
8   9   2019-05-10 08:29:44:10

df = df[~df.one.isin([1,2])]

df
    one date
2   3   2019-05-10 07:00:03
3   4   2019-05-10 06:32:43
4   5   2019-05-10 07:33:31
5   6   2019-05-10 07:37:39:09
6   7   2019-05-10 07:49:01
7   8   2019-05-10 08:52:05
8   9   2019-05-10 08:29:44:10

Это работает, потому что вы изменили тип данных с int на строку

df = df[~df.article_id.isin(['1202623831','1747352473'])]

Попробуйте преобразовать userIDна такие строки:

userIDs = [str(userid) for userid in userIDs]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...