从整个数据框中删除字符

时间:2017-02-09 11:24:08

标签: python string pandas replace

我需要对pandas执行的常见操作是从Excel文件中读取表,然后从所有字段中删除分号。这些列通常是混合数据类型,当我尝试执行以下操作时遇到AtributeError:

for col in cols_to_check:
    df[col] = df[col].map(lambda x: x.replace(';',''))
  

AttributeError:' float'对象没有属性'替换'

当我在替换之前将其包装在str()之前我遇到了Unicode字符的问题,例如

for col in cols_to_check:
    df[col] = df[col].map(lambda x: str(x).replace(';',''))
  

UnicodeEncodeError:' ascii'编解码器不能对字符u' \ xe9'进行编码。位置3:序数不在范围内(128)

在excel中,这是一个非常简单的操作,只需用空字符串替换;即可。如何在整个数据帧的pandas中类似地做到这一点,忽略数据类型?或者我错过了什么?

1 个答案:

答案 0 :(得分:3)

您可以使用DataFrame.replace并选择使用df = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6], 'C':['f;','d:','sda;sd'], 'D':['s','d;','d;p'], 'E':[5,3,6], 'F':[7,4,3]}) print (df) A B C D E F 0 1 4 f; s 5 7 1 2 5 d: d; 3 4 2 3 6 sda;sd d;p 6 3 cols_to_check = ['C','D', 'E'] print (df[cols_to_check]) C D E 0 f; s 5 1 d: d; 3 2 sda;sd d;p 6 df[cols_to_check] = df[cols_to_check].replace({';':''}, regex=True) print (df) A B C D E F 0 1 4 f s 5 7 1 2 5 d: d 3 4 2 3 6 sdasd dp 6 3

ordersRouter.route('/searchorder/:term')
    .get(function(req, res){
        term = req.params.term;
        console.log(term);
        Orders.findById(term)
            .populate({ path: 'userPurchased products.product', select: '-username -password' })
            .exec(function(err, orders){
                if (err) throw err;

                res.json([orders]);
            });
    });