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这是一种方法。最简单的解决方案,如 @JonClements 所建议:
\n\ndf = df.iloc[df[0].str.normalize(\'NFKD\').argsort()]\n
Run Code Online (Sandbox Code Playgroud)\n\n另一种冗长的解决方案,规范化代码由 @EdChum 提供:
\n\ndf = 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