Почему при доступе к столбцам в фрейме данных Pandas с помощью .loc [] появляются повторяющиеся строки? - PullRequest
0 голосов
/ 17 ноября 2018

Почему .loc[] создает повторяющиеся строки в моем DataFrame? Я пытаюсь выбрать несколько столбцов из m3, DataFrame с 47 столбцами, чтобы создать новый DataFrame с именем output.

Проблема: после доступа к столбцам m3 с помощью .loc[] вывод имеет намного больше дубликатов, чем началось с m3. Откуда могли появиться эти дубликаты? Я не нашел в Интернете ничего о .loc[] дублирующих строках. Между прочим, выходной DataFrame объявляется в строке, которая читает output = m3.loc[...].

Код:

print("ARE THERE DUPLICATES in m3? ")
print(m3.duplicated().loc[lambda x: x==True])

output = m3.loc[:,["PLC_name", "line", "track", "notes", "final_source", 
"s_name", "s_line", "s_track", "loc", "alt_loc", "suffix", "alt_match_name"]]

print("ARE THERE DUPLICATES in output? ")
print(output.duplicated().loc[lambda x: x==True].size, "duplicates")

Терминальный вывод:

ARE THERE DUPLICATES in m3? 
5241    True
5242    True
5243    True
5355    True
5356    True
5357    True
dtype: bool
ARE THERE DUPLICATES in output? 
1838 duplicates

Конечно, я мог бы легко решить проблему, позвонив по номеру .drop_duplicates(keep="first"), но мне более интересно узнать, почему .loc[] отображает такое поведение.

1 Ответ

0 голосов
/ 17 ноября 2018

output фильтры для выбранных столбцов из m3.При вызове duplicated на m3, учитываются все столбцы исходного кадра данных.Когда вы звоните duplicated на output, рассматривается только подмножество этих столбцов.

Следовательно, вы можете иметь дубликаты в output, даже если в * нет дубликатов1016 *.

Вот минимальный и воспроизводимый пример того, что вы видите:

df = pd.DataFrame([[3, 8, 9], [4, 8, 9]])
print(df.duplicated().sum(), 'duplicates')
# 0 duplicates

df_filtered = df.loc[:, [1, 2]]
print(df_filtered.duplicated().sum(), 'duplicates')
# 1 duplicates
...