删除列行中除字母之外的所有字符

时间:2018-02-12 17:47:34

标签: python pandas

假设我有一个数据集,在这些数据集的某些列中我有列表。第一个关键问题实际上是有很多列有这样的列表,其中字符串可以用(';')或(';;')分隔,字符串本身以白名单或偶数(';)开头。

对于这些问题的某些情况,我实现了这个功能:

g = [';','']
f = []
for index, row in data_a.iterrows():
for x in row['column_1']:
    if (x in g):
        norm = row['column_1'].split(x)
        f.append(norm)
        print(norm)
        else:

实际上它有效,但问题是它返回了重复的行,并且无法用其他分隔符解决任务。

另一个问题是我改变了存储列值的方式后使用虚拟对象:

column_values = data_a['column_1']
data_a.insert(loc=0, column='new_column_8', value=column_values)
dummies_new_win =      pd.get_dummies(data_a['column_1'].apply(pd.Series).stack()).sum(level=0)

而不是在我的情况下获得40列,我得到50或60.由于事实,我无法创建一个从列表中删除除了字母表之外的所有内容的函数。我想了解如何实现这样的功能,因为相同的字符串含义可以用不同的方式编写:

name-Jack  or name(Jack)  

所需的输出如下所示:

nameJack  nameJack       

2 个答案:

答案 0 :(得分:0)

我不确定我是否理解你,但要删除所有非字母数字,你可以使用简单的正则表达式。

示例:

import re
n = '-s;a-d'
re.sub(r'\W+', '', n)

输出:'悲伤'

答案 1 :(得分:0)

您可以将str.replace用于pandas Series

df = pd.DataFrame({'names': ['name-Jack','name(Jack)']})

df

#         names
# 0   name-Jack
# 1  name(Jack)

df['names'] = df['names'].str.replace('\W+','')

df

#       names
# 0  nameJack
# 1  nameJack