我正在尝试在 pandas 中使用 drop_duplicates()
函数,但似乎 pandas 正在破坏唯一数据:
example.py
import pandas as pd
data = pd.read_csv("test.csv")
data = data.drop_duplicates(keep="first")
data.to_csv("out.csv", index=False)
测试.csv
x,y
3,5
3,5
4,9
6,5
7,0
8,1
0,2
输出.csv
x,y
3,5
4,9
6,5
8,1
0,2
现在,我希望 pandas 删除第二行 3,5
,因为它实际上是重复的。但为什么它也会掉落 7,0
?这对我来说毫无意义。这种现象导致我在放大时丢失了数千行唯一数据。我只是不明白什么吗?来自documentation它说“默认情况下使用所有列”,在我看来这意味着“只有当一行的所有列都与另一行的所有列匹配时才删除一行”,但显然情况并非如此。
我正在使用 Python 3.4
,但不确定在 Python 2.X
上是否会发生同样的事情。
编辑:
无需使用 CSV 也可重现:
import pandas as pd
raw_data = {'x': [7,6,3,3,4,8,0],'y': [0,6,5,5,9,1,2]}
df = pd.DataFrame(raw_data, columns = ['x', 'y'])
print("Before:", df)
df = df.drop_duplicates()
print("After:", df)
github 的人们现在已经知道了,所以在它被修复之前,我想解决方案是要么使用评论中的解决方法,要么暂时切换到 Python 2.7。
最佳答案
这绝对是一个错误,暂时你可以做一个临时修复
import pandas as pd
data = pd.read_csv("data.csv")
data = data.drop_duplicates(subset=['x'], keep="first")
Sepcifying subset
似乎可以解决问题。
x y
0 3 5
2 4 9
3 6 5
4 7 0
5 8 1
6 0 2
关于python - 为什么 pandas 会丢弃唯一的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33224356/