我有一个数据框。它包含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
数据框中删除行?
答案 0 :(得分:1)
仅在样本数据上使用“ 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更改为string
df = df[~df.article_id.isin(['1202623831','1747352473'])]
尝试将用户ID转换为这样的字符串:
userIDs = [str(userid) for userid in userIDs]