【发布时间】:2021-11-18 03:46:29
【问题描述】:
我有 2 个带有一些随机数的 csv 文件,如下所示:
csv1.csv
0 906018
1 007559
2 910475
3 915104
4 600393
...
5070 907525
5071 903079
5072 001910
5073 909735
5074 914861
length 5075
csv2.csv
0 5555
1 7859
2 501303
3 912414
4 913257
...
7497 915031
7498 915030
7499 915033
7500 902060
7501 915038
length 7502
csv1 中的一些元素存在于csv2 中,但我不知道具体是哪一个,我想提取这些唯一值。所以我的想法是开始将 2 个数据框合并在一起,然后删除重复项。
所以我写了以下代码:
import pandas as pd
import csv
unique_users = pd.read_csv('./csv1.csv')
unique_users['id']
identity = pd.read_csv('./csv2.csv')
identityNumber = identity['IDNumber']
identityNumber
df = pd.concat([identityNumber, unique_users])
直到这里一切都很完美,df的长度是2个长度的总和,但我意识到我卡住的部分。
df concat 它完成了它的工作并根据索引进行了 concat,所以现在我有大量的 NaN。
当我使用代码时:
final_result = df.drop_duplicates(keep=False)
数据框不会丢弃任何值,因为 df 结构现在如下所示:
Identitynumber. ID
5555 NaN
所以我猜 drop duplicate 正在寻找相同的确切值,但由于它们不存在,它只是保留它。
所以我想做的是循环遍历两个数据帧,如果 csv1 中的值存在于 csv2 中,我希望它们被删除。
有人可以帮忙吗?
如果您需要更多信息,请告诉我。
更新:
我想我找到了不工作的原因,但我不知道如何解决这个问题。
我的 csv1 看起来像这样:
id
906018,
007559,
910475,
915104,
600393,
007992,
502313,
004609,
910017,
007954,
006678,
在 Jupiter notebook 中,当我打开 csv 时,它看起来是这样的。
id
906018 NaN
007559 NaN
910475 NaN
915104 NaN
600393 NaN
... ...
907525 NaN
903079 NaN
001910 NaN
909735 NaN
914861 NaN
我不明白为什么将 id 视为 NaN。
事实上,我尝试在 csv2 中添加一个新列,并作为值传递来自 csv1 的 id..并且我可以确认它们都是 NaN。
所以我相信问题的根源肯定是这个,而不是反映在所有其他事件上。
谁能帮助了解我如何解决这个问题?
【问题讨论】:
-
我是否理解正确,您想在 df2 中查找 df1 中已经存在的值,然后将其删除?有几个相似(但不同)的操作,所以清晰很重要
-
@anon01 是的,在 df1 我有 5075 个值,在 df2 我有 7502。在 df2 我有大部分值在 df1..所以如果我删除重复项 (7502 - 5075) 我应该只有 dinstinc
-
但是现在在我的输出中我有 9000 和 plus 作为输出。这意味着它没有删除所有重复的值
-
@NaydenVan 看起来它是由尾随逗号引起的。由于每行末尾有一个逗号,Pandas 预计会有两列,并假设数字是索引。删除结尾的逗号,它应该可以工作,但很难确定。你的两个 csv 文件是这样的吗?