需要将编码值翻译并转换为 python 中的可读英文字符串
need to translate and convert encoded values to readable english strings in python
我有下面类似的数据框,其中公司名称中有日文、中文...
data = [['company1', '<U+042E><U+043F><U+0438><U+0442><U+0435><U+0440>'], ['company2',
'<c1>lom<e9>kszer Kft.'], ['company3', 'Ernst and young'],
['company4', '<c5>bo Akademi']]
df = pd.DataFrame(data, columns = ['Name', 'company_name'])
看起来像下面
现在我只想将这些值转换并翻译成可读的英文值。
我可以这样做吗? , 如果是, 怎么样, 请..
这需要一些工作。我只是手动翻译它。
这是:
>>> '<U+042E><U+043F><U+0438><U+0442><U+0435><U+0440>'
'<U+042E><U+043F><U+0438><U+0442><U+0435><U+0440>' # not useful!
>>> '\u042E\u043F\u0438\u0442\u0435\u0440' # changed the format manually
'Юпитер' # WOW that's it
我找不到自动执行此操作的方法。希望对您有所帮助。
您的示例没有展示单一的统一编码。我们可以推测两位数是 Latin-1,但我猜测(同样基于 duplicate question)事实确实比这更复杂。
无论如何,至少对于一般方向,试试这个:
import re
...
for index in range(len(data)):
data[index][1] = re.sub(
r'<U\+([0-9a-fA-F]{4})>',
lambda x: chr(int(x.group(1), 16)),
re.sub(
r'<([0-9a-fA-F]{2})>',
lambda x: chr(int(x.group(1), 16)),
data[index][1]))
您可以通过稍微复杂一点的正则表达式来避免重复的 lambda 表达式。
for index in range(len(data)):
data[index][1] = re.sub(
r'<(?:U\+)?((?<=\+)[0-9a-fA-F]{4}|(?<=<)[0-9a-fA-F]{2})>',
lambda x: chr(int(x.group(1), 16)),
data[index][1])
我有下面类似的数据框,其中公司名称中有日文、中文...
data = [['company1', '<U+042E><U+043F><U+0438><U+0442><U+0435><U+0440>'], ['company2',
'<c1>lom<e9>kszer Kft.'], ['company3', 'Ernst and young'],
['company4', '<c5>bo Akademi']]
df = pd.DataFrame(data, columns = ['Name', 'company_name'])
看起来像下面
现在我只想将这些值转换并翻译成可读的英文值。
我可以这样做吗? , 如果是, 怎么样, 请..
这需要一些工作。我只是手动翻译它。 这是:
>>> '<U+042E><U+043F><U+0438><U+0442><U+0435><U+0440>'
'<U+042E><U+043F><U+0438><U+0442><U+0435><U+0440>' # not useful!
>>> '\u042E\u043F\u0438\u0442\u0435\u0440' # changed the format manually
'Юпитер' # WOW that's it
我找不到自动执行此操作的方法。希望对您有所帮助。
您的示例没有展示单一的统一编码。我们可以推测两位数是 Latin-1,但我猜测(同样基于 duplicate question)事实确实比这更复杂。
无论如何,至少对于一般方向,试试这个:
import re
...
for index in range(len(data)):
data[index][1] = re.sub(
r'<U\+([0-9a-fA-F]{4})>',
lambda x: chr(int(x.group(1), 16)),
re.sub(
r'<([0-9a-fA-F]{2})>',
lambda x: chr(int(x.group(1), 16)),
data[index][1]))
您可以通过稍微复杂一点的正则表达式来避免重复的 lambda 表达式。
for index in range(len(data)):
data[index][1] = re.sub(
r'<(?:U\+)?((?<=\+)[0-9a-fA-F]{4}|(?<=<)[0-9a-fA-F]{2})>',
lambda x: chr(int(x.group(1), 16)),
data[index][1])