将字符串操作应用于pandas数据帧

时间:2017-04-17 20:46:08

标签: python string pandas

有类似的答案,但我无法将其应用于我自己的案例 我想在我的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 ""

现在,我对相同的项目有了新的观察结果,我想将它们与旧的观察结果合并。但是当我重新开始时我忘了使用相同的方法

3 个答案:

答案 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代表单词字符\walnum + _代表空格和\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