在Python中,如何对包含重音符号的数据框进行排序?

Fif*_*ifi 4 python sorting string dataframe pandas

我使用 sort_values 对数据框进行排序。数据帧包含带有重音符号的 UTF-8 字符。这是一个例子:

\n\n
>>> df = pd.DataFrame ( [ [\'i\'],[\'e\'],[\'a\'],[\'\xc3\xa9\'] ] )\n>>> df.sort_values(by=[0])\n   0\n2  a\n1  e\n0  i\n3  \xc3\xa9\n
Run Code Online (Sandbox Code Playgroud)\n\n

正如您所看到的,带有重音符号的“\xc3\xa9”位于末尾,而不是位于不带重音符号的“e”之后。

\n\n

请注意,真实的数据框有几列!

\n

jpp*_*jpp 6

这是一种方法。最简单的解决方案,如 @JonClements 所建议:

\n\n
df = df.iloc[df[0].str.normalize(\'NFKD\').argsort()]\n
Run Code Online (Sandbox Code Playgroud)\n\n

另一种冗长的解决方案,规范化代码由 @EdChum 提供

\n\n
df = pd.DataFrame([[\'i\'],[\'e\'],[\'a\'],[\'\xc3\xa9\']])\n\ndf = df.iloc[df[0].str.normalize(\'NFKD\').argsort()]\n\n# remove accents\ndf[1] = df[0].str.normalize(\'NFKD\')\\\n             .str.encode(\'ascii\', errors=\'ignore\')\\\n             .str.decode(\'utf-8\')\n\n# sort by new column, then drop\ndf = df.sort_values(1, ascending=True)\\\n       .drop(1, axis=1)\n\nprint(df)\n\n   0\n2  a\n1  e\n3  \xc3\xa9\n0  i\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

  • 在这种情况下 - 可能是: `df.iloc[df[0].str.normalize('NFKD').argsort()]` 就是所需要的...... (4认同)