pd.Series.str.lower.replace('str','replace_str')不起作用,但pd.Series.str.replace。('STR','replace_str')可以吗?

时间:2019-07-12 05:02:19

标签: python pandas

我正在解决Dataquest问题:https://app.dataquest.io/m/293/data-cleaning-basics/5/removing-non-digit-characters

问题的解决方案是将数据帧ram中的列laptops替换为可以通过删除字符串“ GB”转换为数字数据类型的字符串。

在此问题中,代码laptops['ram'] = laptops['ram'].str.lower().replace('gb','')无法生成正确的答案,我尝试使用该答案,因为它可以区分大小写。

但是,laptops['ram'] = laptops['ram'].str.replace('GB','')确实有效。显然所有源数据的大写字母都包含字符串“ GB”。

这是为什么? pd.Series.str.lower()绝对是一种方法,那么第一种方法为什么不返回期望的结果?

1 个答案:

答案 0 :(得分:1)

您需要Series.str.replace来替换默认的子字符串:

laptops = pd.DataFrame({'ram': ['ss GB', 'fff GB', 'GB']})

laptops['ram'] = laptops['ram'].str.lower().str.replace('gb','')
print (laptops)

0   ss 
1  fff 
2      

或在Series.replace中添加regex=True

laptops['ram'] = laptops['ram'].str.lower().replace('gb','', regex=True)
print (laptops)
    ram
0   ss 
1  fff 
2      

如果仅使用Series.replace,则不适用于子字符串:

laptops['ram'] = laptops['ram'].str.lower().replace('gb','')
print (laptops)
      ram
0   ss gb
1  fff gb
2