假设我有一个数据集,在这些数据集的某些列中我有列表。第一个关键问题实际上是有很多列有这样的列表,其中字符串可以用(';')或(';;')分隔,字符串本身以白名单或偶数(';)开头。
对于这些问题的某些情况,我实现了这个功能:
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
答案 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