python - 为什么使用 .loc[] 访问 pandas 数据帧的列会产生重复的行?

标签 python pandas csv dataframe duplicates

为什么 .loc[] 在我的 DataFrame 中产生重复的行?我试图从 m3(一个包含 47 列的 DataFrame)中选择几列,以创建一个名为输出的新 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[] 显示此行为。

最佳答案

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

因此,即使 m3 中没有重复项,output 中也可能有重复项。

这是您所看到的最小且可重现的示例:

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

关于python - 为什么使用 .loc[] 访问 pandas 数据帧的列会产生重复的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53346473/

相关文章:

python - 如何选择要在 pandas groupby 中显示的列值

python - 返回 csv 模块 python 中行的索引

csv - 如何将 pig 的输出存储到 hive 表中?

python - 使用 openpyxl 查找隐藏的单元格

python - 如何在本地针对 OAuth 进行开发?

python - 如果我使用 fbone 如何运行 celery?

python - 在 Python 中按 esc 键停止,按任何其他键继续

json - 使用 pandas 在列中加载 Json 数据多个值

python - 如何从带有注释的txt文件创建pandas数据框?

javascript - 在 Firefox 中导出 csv 数据时出错