Я пытаюсь использовать drop_duplicates()
функции в панде, но кажется, что панды разрушают уникальные данные:Почему панды бросают уникальные строки?
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)
test.csv
x,y
3,5
3,5
4,9
6,5
7,0
8,1
0,2
out.csv
x,y
3,5
4,9
6,5
8,1
0,2
Теперь я ожидал бы, что панды сбросят второй ряд 3,5
, так как он на самом деле является дубликатом. Но почему это также падает 7,0
?? Для меня это не имеет смысла. Это явление заставляет меня терять тысячи строк уникальных данных, когда я его увеличиваю. Я что-то не понимаю? Из documentation в нем говорится, что «по умолчанию используйте все столбцы», что, на мой взгляд, означает «только отбросить строку, если все столбцы одной строки соответствуют всем столбцам другой строки», но это явно не так ,
Я использую Python 3.4
и не уверен, что то же самое происходит на Python 2.X
.
Edit:
Также воспроизводимые без использования 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.
Вы правы, этот пример работает должным образом в Python 2, но производит * странные * Результаты в Python 3 –
@bushmanov Хорошо знать, что я не схожу с ума. Может быть, я должен создать проблему в github. – RPGillespie
Если 'x' и' y' являются именами столбцов, то «данные» должны быть, например, 3 5 не 3,5, а 3 и 5 - в строке, но в двух разных «столбцах». Можете ли вы показать, как выглядит 'dataframe', прежде чем вывести его в' csv'? –