2017-06-12 83 views
-2

我在熊猫中有下表。Python:将函数应用于熊猫数据框中的某些元素/单元

+--------+--------+--------+-----+ 
| A | B | C | D | 
+--------+--------+--------+-----+ 
| foo | b'bar0 | b'foo0 | 253 | 
| b'bar0 | bar | blah | 485 | 
+--------+--------+--------+-----+ 

我想为单元格中的每个元素提供一个函数,该元素以b'开头。 功能是:

def elementdecode(data,password): 
    aa=row[2:-1] 
    bb=aa.encode() 
    cc = bb.decode('unicode-escape').encode('ISO-8859-1') 
    return (decode(cc, password).decode()) 

背景:我有一个具有在它们的正常值和加密值的CSV文件,我想申请的解密方法只对未加密的元件。我的计划是将csv读入熊猫,并仅对加密的单元应用解密功能(例如,以'b开头)。一旦加密完成,我将数据导出到新的csv中。我想使用applymap,而不是使用循环,但我不知道如何仅在特定元素上使用它。

谢谢

回答

1

你试过吗?

def elementdecode(data,password): 
    #if the first condition if not met, the second is not evaluated 
    if (type(x) == str) and ("\'b" in x): 
     aa=row[2:-1] 
     bb=aa.encode() 
     cc = bb.decode('unicode-escape').encode('ISO-8859-1') 
     return (decode(cc, password).decode()) 
    else: 
     return x 

df.applymap(lambda x: elementdecode(x,password)) 
+0

这种表现如何明智? 'if'语句不会使该操作非常缓慢? – valenzio

+0

@valenzio我不这么认为,你必须以某种方式过滤它,你可以通过改变if语句中的内容来取得更快的速度,这取决于数据的特殊性,但逻辑应该在那里,是它工作? – Tbaki

+0

我更新了我的问题,我的数据框的问题是它有不同的格式,字符串,整数,日期,NaN。只有所有条目都是字符串时,您的方法才有效我想我可以将所有条目格式化为字符串,因为无论如何我都将它们写回到csv。我会回报。 – valenzio

相关问题