Skip to main content
 首页 » 编程设计

python之将数据框列与字符串和数字进行比较

2025年05月04日20hnrainll

我有一个包含两列的数据框,其中包含字符串和数字。当我比较这两列时,即使它们看起来相同,它们也不匹配。

示例数据:

old_code     new_code 
100000       100000 

当我比较时,结果是错误的:

df['old_code'] == df['new_code'] 
0    False 
dtype: bool 

数据类型相同:

df.dtypes 
old_code    object 
new_code    object 
dtype: object 

我尝试剥离列以防出现空格,但它们仍然不匹配:

df['old_code'].str.strip() == df['new_code'].str.strip()  
0    False 
dtype: bool 

我将 dataframe 制作成字典,看看是否能发现任何不妥之处,我注意到由于某种原因,其中一列被格式化为字符串,另一列被格式化为整数:

d = df.to_dict() 
d 
{'old_code': {0: '100000'}, 'new_code': {0: 100000}} 

关于如何比较这些列有什么建议吗?我不想将数据类型更改为整数,因为有些行确实是字符串。

请您参考如下方法:

object dtype系列可以容纳任何东西

问题是对象 dtype 系列包含任意 Python 对象。这里你的系列有一个字符串和另一个整数:

df = pd.DataFrame({'old_code': ['100000'], 'new_code': [100000]}, dtype=object) 
 
print(df.dtypes) 
# new_code    object 
# old_code    object 
# dtype: object 
 
print(type(df['old_code'].iat[0])) 
# <class 'str'> 
 
print(type(df['new_code'].iat[0])) 
# <class 'int'> 

因此,要保持一致。将两者都转换为数字或都转换为字符串。

转换为数字

cols = ['old_code', 'new_code'] 
df[cols] = df[cols].apply(pd.to_numeric) 

转换为字符串

df[cols] = df[cols].apply(lambda s: s.astype(str)) 

无需修改数据框

严格来说,您不需要更新数据框。您可以仅出于比较目的对每个系列进行分类:

# numeric comparison 
pd.to_numeric(df['old_code']) == pd.to_numeric(df['new_code']) 
 
# string comparison 
df['old_code'].astype(str) == df['new_code'].astype(str)