删除数据框中的非字母数字符号

时间:2018-09-27 09:11:34

标签: python python-2.7 pandas dataframe

如何从数据框中的值中删除非字母?我只设法全部转换为小写

def doubleAwardList(self):
        dfwinList = pd.DataFrame()
        dfloseList = pd.DataFrame()
        dfwonandLost = pd.DataFrame()
        #self.dfWIN... and self.dfLOSE... is just the function used to call the files chosen by user
        groupby_name= self.dfWIN.groupby("name")
        groupby_nameList= self.dfLOSE.groupby("name _List")

        list4 = []
        list5 = []

        notAwarded = "na"

        for x, group in groupby_name:
            if x != notAwarded:
                list4.append(str.lower(str(x)))
        dfwinList= pd.DataFrame(list4)

        for x, group in groupby_nameList:
            list5.append(str.lower(str(x)))
        dfloseList = pd.DataFrame(list5)

数据示例:基本上,我主要需要删除句号和连字符,因为我需要将其与另一个文件进行比较,但是命名并不十分一致,因此我不得不删除非字母数字以获得更准确的结果< / p>

creative-3
smart tech pte. ltd.
nutritive asia
asia's first

所需结果:

creative 3
smart tech pte ltd
nutritive asia
asia s first

2 个答案:

答案 0 :(得分:0)

为什么不只是以下内容,(我确实将其降低了):

df=df.replace('[^a-zA-Z0-9]', '',regex=True).str.lower()

那么现在:

print(df)

将获得所需的数据帧

更新:

尝试:

df=df.apply(lambda x: x.str.replace('[^a-zA-Z0-9]', '').lower(),axis=0)

如果只有一列:

df['your col']=df['your col'].str.replace('[^a-zA-Z0-9]', '').str.lower()

答案 1 :(得分:0)

仅使用DataFrame.replace并将空白添加到模式:

df = df.replace('[^a-zA-Z0-9 ]', '', regex=True)

如果有一列-Series

df = pd.DataFrame({'col': ['creative-3', 'smart tech pte. ltd.', 
                           'nutritive asia', "asia's first"],
                   'col2':range(4)})
print (df)
                    col  col2
0            creative-3     0
1  smart tech pte. ltd.     1
2        nutritive asia     2
3          asia's first     3

df['col'] = df['col'].replace('[^a-zA-Z0-9 ]', '', regex=True)
print (df)

                  col  col2
0           creative3     0
1  smart tech pte ltd     1
2      nutritive asia     2
3         asias first     3

编辑:

如果可能有多个列,则仅选择对象,显然选择字符串列,并在必要时强制转换为字符串:

cols = df.select_dtypes('object').columns
print (cols)
Index(['col'], dtype='object')

df[cols] = df[cols].astype(str).replace('[^a-zA-Z0-9 ]', '', regex=True)
print (df)
                  col  col2
0           creative3     0
1  smart tech pte ltd     1
2      nutritive asia     2
3         asias first     3