我正在尝试将unicode单词的DataFrame中的数据转换为ASCII到具有特定字符更改的新列...
characterMap = {u'\u00E7': 'c', u'\u00C7' : 'C', u'\u011F' : 'g', u'\u011E' : 'G', u'\u00F6': 'o', u'\u00D6' : 'O', u'\u015F' : 's', u'\u015E' : 'S', u'\u00FC' : 'u', u'\u00DC' : 'U' , u'\u0131' : 'i', u'\u0049' : 'I', u'\u0259' : 'e', u'\u018F' : 'E'}
def convertASCII(word):
asciiWord = ""
word = str(word).rstrip()
for c in word:
if c in characterMap.keys():
asciiWord = asciiWord + characterMap[c]
else:
asciiWord = asciiWord + c
return asciiWord;
test['ascii'] = test['token'].apply(convertASCII)
所以说结果应该是这样的......
token ascii
1555757 qurbangaha qurbangaha
379221 saylı sayli
2456599 öhdəliyi ohdeliyi
1128903 ki ki
467997 ilişib ilisib
但是,ASCII列只是令牌列的重复而不是上面所需的结果?我已经在另一个脚本上手动运行了convertASCII代码,它做了我想要的,但不确定pandas的bug是什么?
答案 0 :(得分:2)
如果您尝试进行的unicode转换是标准的,那么您可以直接转换为ascii。
import unicodedata
test['ascii'] = test['token'].apply(lambda val: unicodedata.normalize('NFKD', val).encode('ascii', 'ignore').decode())
示例:
import unicodedata
data = [{'name': 'saylı'}, {'name': 'öhdəliyi'}]
df = pd.DataFrame.from_dict(data, orient='columns')
df['name'].apply(lambda val: unicodedata.normalize('NFKD', val).encode('ascii', 'ignore').decode())
输出:
0 sayl
1 ohdliyi
答案 1 :(得分:1)
我认为需要str.normalize
,但首先需要dictionary
test = pd.DataFrame({'token':['qurbangaha','saylı','öhdəliyi','ki','ilişib']})
print (test)
token
0 qurbangaha
1 saylı
2 öhdəliyi
3 ki
4 ilişib
characterMap = {u'\u00E7': 'c', u'\u00C7' : 'C', u'\u011F' : 'g', u'\u011E' : 'G', u'\u00F6': 'o', u'\u00D6' : 'O', u'\u015F' : 's', u'\u015E' : 'S', u'\u00FC' : 'u', u'\u00DC' : 'U' , u'\u0131' : 'i', u'\u0049' : 'I', u'\u0259' : 'e', u'\u018F' : 'E'}
test['ascii'] = (test['token'].astype("str")
.str.rstrip()
.replace(characterMap, regex=True)
.str.normalize('NFKD')
.str.encode('ascii', errors='ignore')
.str.decode('utf-8'))
print (test)
token ascii
0 qurbangaha qurbangaha
1 saylı sayli
2 öhdəliyi ohdeliyi
3 ki ki
4 ilişib ilisib
以避免丢失字符:
dictionary
如果在test['ascii'] = (test['token'].astype("str")
.str.rstrip()
.replace(characterMap, regex=True))
print (test)
token ascii
0 qurbangaha qurbangaha
1 saylı sayli
2 öhdəliyi ohdeliyi
3 ki ki
4 ilişib ilisib
中定义了所有可能的值,则解决方案应该简化:
<React.Fragment>
<header>
<h1>Company Login</h1>
</header>
<form name="loginForm" onSubmit={this.onSubmit}>
<div className="form-group-collection">
<div className="form-group">
<label>Username/User ID:</label>
<input name="username" onChange={e => this.setState({ username: e.target.value })} value={username} />
</div>
<div className="form-group">
<label>Password:</label>
<input type="password" name="password" onChange={e => this.setState({ password: e.target.value })} value={password} />
</div>
</div>
<br />
<input type="submit" value="Login" />
</form>
<footer>Copyright © multihands.com. </footer>
</React.Fragment>