如何忽略大小写对比两个DataFrame列并保留原大小写返回差异
忽略大小写对比Pandas DataFrame列并保留原始值的差异
你可以通过以下两种方法实现需求,既忽略大小写对比差异,又保留原始数据的大小写格式:
方法一:布尔索引结合小写集合
这种方式简洁高效,适合快速筛选:
import pandas as pd if __name__ == "__main__": data1={'Name':['Karan','Rohit','Sahil','Aryan']} data2={'Name':['karan','Rohit','Sahil']} df1=pd.DataFrame(data1) df2=pd.DataFrame(data2) # 将df2的名称转小写存入集合,用于快速匹配 df2_name_lower = set(df2['Name'].str.lower()) # 筛选df1中名称小写不在df2集合里的项,保留原始格式 diff_result = df1[~df1['Name'].str.lower().isin(df2_name_lower)]['Name'].tolist() print(diff_result) # 输出: ['Aryan']
方法二:Merge连接+匹配标记
如果需要更清晰的匹配过程记录,可以用merge方法:
import pandas as pd if __name__ == "__main__": data1={'Name':['Karan','Rohit','Sahil','Aryan']} data2={'Name':['karan','Rohit','Sahil']} df1=pd.DataFrame(data1) df2=pd.DataFrame(data2) # 添加小写辅助列,用于忽略大小写的匹配 df1['lower_name'] = df1['Name'].str.lower() df2['lower_name'] = df2['Name'].str.lower() # 左连接两个DataFrame,标记每条记录的匹配来源 merged_df = df1.merge(df2, on='lower_name', how='left', indicator=True) # 筛选仅存在于df1的记录,提取原始名称 diff_result = merged_df[merged_df['_merge'] == 'left_only']['Name_x'].tolist() print(diff_result) # 输出: ['Aryan']
两种方法都能准确识别Karan和karan为匹配项,最终仅返回原始格式的Aryan,不会丢失原始数据的大小写信息。
内容的提问来源于stack exchange,提问作者Anna Ortega
相关产品推荐
相关产品推荐

