为什么 .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/