有类似的答案,但我无法将其应用于我自己的案例 我想在我的pandas数据帧中删除Windows目录名称的禁用字符。我尝试使用类似的东西:
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
0 stback
1 yhhxx
2 adfgs
3 ghytt23
4 ghh_h
我怎么能做到这一点? 注意:我之前从互联网上删除了数据,并使用以下代码用于旧版本
item_name = "".join(x for x in item_name.text.rstrip() if x.isalnum() or x in [" ", "-", "_"]) if item_name else ""
现在,我对相同的项目有了新的观察结果,我想将它们与旧的观察结果合并。但是当我重新开始时我忘了使用相同的方法
答案 0 :(得分:4)
您可以将条件汇总为负字符类,并使用KafkaSinglePortInputOperator kafkaInput = dag.addOperator("kafkaInput", KafkaSinglePortInputOperator.class);
kafkaInput.setTopics("testing2");
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("enable.auto.commit", "true");
kafkaInput.setConsumerProps(props);
kafkaInput.setClusters("localhost:9092");
CouchbasePOJOSetOperator couchOutput = dag.addOperator("couchOutput", CouchbasePOJOSetOperator.class);
CouchBaseWindowStore store = new CouchBaseWindowStore();
store.setBucket("default");
store.setUriString("localhost:8091,localhost:8091");
store.setUserConfig("");
store.setPasswordConfig("");
store.setPassword("");
couchOutput.setStore(store);
try{
store.connect();
}catch (Exception e){
e.printStackTrace();
}
CouchBaseJSONSerializer serializer = new CouchBaseJSONSerializer();
couchOutput.setSerializer(serializer);
ArrayList<String> expressions = new ArrayList<String>();
expressions.add("getValue()");
couchOutput.setExpressions(expressions);
dag.addStream("kafkaInput", kafkaInput.outputPort, couchOutput.input).setLocality(Locality.CONTAINER_LOCAL);
删除它们,此处str.replace
代表单词字符\w
,alnum + _
代表空格和\s
是文字破折号。对于字符类中的-
,^
匹配任何不是字母数字的字符,也不匹配[^\w\s-]
,那么您可以使用[" ", "-", "_"]
方法将其删除:
replace
答案 1 :(得分:2)
尝试
import re
df.item_name.apply(lambda x: re.sub('\W+', '', x))
0 stback
1 yhhxx
2 adfgs
3 ghytt23
4 ghh_h
答案 2 :(得分:1)
如果您有正确转义的字符列表
lst = ['\\\\', '\*', '\?', '%', '&', '\{']
df.replace(lst, '', regex=True)
item_name
0 stback
1 yhhxx
2 adfgs
3 ghytt23
4 ghh_h