使用整数列表删除数据框行

时间:2019-05-10 04:42:39

标签: python pandas dataframe jupyter-notebook

我有一个数据框。它包含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'])]

错误是unhashableKeyError: not found in axis

如何从df['article_id']列表中的usedIDs数据框中删除行?

1 个答案:

答案 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]