为什么使用.loc []访问熊猫数据框的列会产生重复的行?

时间:2018-11-16 22:57:50

标签: python pandas csv dataframe duplicates

为什么.loc[]在我的DataFrame中产生重复的行?我正在尝试从m3中选择几列,即一个47列的DataFrame,以创建一个称为output的新DataFrame。

问题:用.loc[]访问m3的列后,输出的重复次数比开始时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 :(得分:1)

output过滤器,用于过滤来自m3中的选定列。当您在duplicated上调用m3时,将考虑原始数据帧中的所有所有列。当您在duplicated上调用output时,将仅考虑这些列的子集

因此,即使output中没有重复项,您也可以在m3中存在重复项。

这是您所看到的内容的最小且可复制的示例:

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