2017-04-17 59 views
2

也有类似的答案,但我不能将它应用到我自己的案例中 我想摆脱我的熊猫数据框中Windows目录名称的禁用字符。我试图用这样的:将字符串操作应用到熊猫数据框中

item_name 
0 stback 
1 yhhxx 
2 adfgs 
3 ghytt23 
4 ghh_h 

我怎么能做到这一点:

df1['item_name'] = "".join(x for x in df1['item_name'].rstrip() if x.isalnum() or x in [" ", "-", "_"]) if df1['item_name'] else "" 

假设我有这样

item_name 
0 st*back 
1 yhh?\xx 
2 adfg%s 
3 ghytt&{23 
4 ghh_h 

我希望得到一个数据帧? 注:我从互联网上刮下的数据前面,并用下面的代码针对旧版

item_name = "".join(x for x in item_name.text.rstrip() if x.isalnum() or x in [" ", "-", "_"]) if item_name else "" 

现在,我有相同的项目新的意见,我想与旧的意见合并。但我忘了用同样的方法,当我rescraped

+0

'df.item_name = df.item_name.apply(拉姆达X:x.replace( “\ s | - | _”, “”)' –

+0

不,但我想保留“_”和“ - ”只是我想摆脱禁止Windows目录的项目。无论如何, – edyvedy13

+0

应该是're.sub'。 –

回答

4

你可以总结的条件为负字符类,并使用str.replace删除它们,这里\w代表字字符alnum + _\s代表空间和-是文字破折号。随着字符类^[^\w\s-]不是字母数字,也不[" ", "-", "_"]任何字符相匹配,那么你可以使用replace方法将其删除:

df.item_name.str.replace("[^\w\s-]", "") 

#0  stback 
#1  yhhxx 
#2  adfgs 
#3 ghytt23 
#4  ghh_h 
#Name: item_name, dtype: object 
+0

对不起,我编辑了我的问题,它会达到我以前所做的一样吗? – edyvedy13

+0

它应该。如答案中所述,该模式删除不是'[a-zA-Z0-9,_, - ,“”]'的字符。 – Psidom

2

尝试

import re 
df.item_name.apply(lambda x: re.sub('\W+', '', x)) 

0  stback 
1  yhhxx 
2  adfgs 
3 ghytt23 
4  ghh_h 
1

如果你有一个正确转义字符的列表

lst = ['\\\\', '\*', '\?', '%', '&', '\{'] 
df.replace(lst, '', regex=True) 

    item_name 
0 stback 
1  yhhxx 
2  adfgs 
3 ghytt23 
4  ghh_h 
相关问题