Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将包含十六进制行的多类型序列转换为ascii_Python_Python 3.x_Pandas - Fatal编程技术网

Python 将包含十六进制行的多类型序列转换为ascii

Python 将包含十六进制行的多类型序列转换为ascii,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个如下所示的数据帧: type value

我有一个如下所示的数据帧:

  type     value                                                                                                                                                                                                                                                    
  hex      "6d,79,20,6e,61,6d,65,20,69,73,20,6a,6f,68,6e,0a"                                                                                                                                                                                                    
  name     john                                                                                                                                                                                                                                                     
  dynamic  12                                                                                                                                                                                                                                                       
  action   encroach                                                                                                                                                                                                                                                 
  hex_2    "4d,69,6e,65,20,69,73,20,73,61,75,6c,2c,20,6e,69,63,65,20,74,6f,20,6d,65,65,74,20,79,6f,75,2e,20"                                                                                                                                                    
  hex      "4d,79,20,6e,61,6d,65,20,69,73,20,4d,61,74,74"                                                                                                                                                                                                           
  name     Matt                                                                                                                                                                                                                                                     
  dynamic  91                                                                                                                                                                                                                                                       
  action   penalty                                                                                                                                                                                                                                                  
  hex_2   "49,20,61,6d,20,61,6e,20,65,6e,63,6f,64,65,64,20,6d,65,73,73,61,67,65,20,74,68,61,74,20,49,20,68,61,76,65,20,74,6f,20,6b,65,65,70,20,69,6e,74,65,72,6e,61,6c,20,74,6f,20,6d,79,20,6f,72,67,61,6e,69,7a,61,74,69,6f,6e,2e,20"                              
如何有条件地将十六进制和十六进制_2重新格式化为ascii

使用函数调用将十六进制转换为ascii的当前代码如下:

def ascii_convert(char):
    value = int(char, 16)
    if 32 <= value < 128:
        return chr(value)
    else:
        return char

Current Failed attempt at converting:
print(df[df['type'].str.contains('hex|hex_2').apply(lambda x: ascii_convert(x)))
我知道转换函数适用于字符,但在我的特定条件下使用该函数时遇到困难。我的数据类型标签可以有5个或6个不同的标签,我想从十六进制转换为ascii,例如十六进制和十六进制2


任何帮助都将是惊人的。谢谢。

尝试失败,因为使用
str.contains('hex | hex_2')
尝试匹配确切的字符串'hex | hex_2'。但不存在具有该名称的列

相反,由于您确认要转换的所有列的名称中都有字符串“hex”,因此应该这样做

 data["value"] = df.apply(lambda x: convert_ascii(x["value"]) \
 if 'hex' in x["type"] else x["value"], axis=1)
这将选择
type
列中带有“hex”的行的值并对其进行转换,其他列保持不变

这里有一个例子:

  one  two labels
0  70  1      o
1  67  0      b
2  57  1      o
3  64  1      b
4  74  0      o
5  65  1      b
6  56  1      o
7  59  1      b
8  60  1      o
9  63  0      b
应用函数并更新“标签”列:

data["type"] = data.apply(lambda x: x["labels"] *4 \
               if x["one"] >= 60 else x["labels"], axis=1)

   one  two labels
0   70    1   oooo
1   67    0   bbbb
2   57    1      o
3   64    1   bbbb
4   74    0   oooo
5   65    1   bbbb
6   56    1      o
7   59    1      b
8   60    1   oooo
9   63    0   bbbb

有一些错误处理和数据问题。如果我的所有文件不包含正确的数据要求,那么这将有助于删除空字节和错误处理

def fn(foo):
    if "NONE" in foo:
        return foo
    else:
        try:
            x = foo.replace(' ', '')
            x = foo.replace('00', '')
            return "".join(binascii.unhexlify(x).decode())
        except:
            binascii.Error

df['Value'] = df['Value'].str.split(',')
df['Value'] = df[df['Type'].str.contains('hex')]['Value'].apply(lambda x: fn("".join(x)))

因此,您有要转换的列hex、hex1、hex2、hex3、hex4、hex5?为了完整性,您可以发布数据示例吗?如果值列是某个值,您想重新格式化hex和hex_2列吗?如果x.value='some_value',则大致
重新格式化(x)?这是否试图使用我的函数将包含字符串“hex”的类型列转换为ascii值?我有大约20列,只想转换df.Value列,如果它包含相应的df.type.str.contains('hex')。@johnnyb看看这是否正确helps@johnnyb参见示例
def fn(foo):
    if "NONE" in foo:
        return foo
    else:
        try:
            x = foo.replace(' ', '')
            x = foo.replace('00', '')
            return "".join(binascii.unhexlify(x).decode())
        except:
            binascii.Error

df['Value'] = df['Value'].str.split(',')
df['Value'] = df[df['Type'].str.contains('hex')]['Value'].apply(lambda x: fn("".join(x)))