使用pandas dataframe将pyf转换为python中的ascii

时间:2018-04-18 05:26:13

标签: python pandas unicode

我正在尝试将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是什么?

2 个答案:

答案 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 &copy; multihands.com. </footer>
</React.Fragment>