【问题标题】:Sort Pandas Dataframe which contains german umlauts [Solution]对包含德语变音符号的 Pandas 数据框进行排序 [解决方案]
【发布时间】:2021-05-31 23:37:21
【问题描述】:

我有一个包含多个系列的 pandas 数据框,我按其中一些对这个数据框进行排序:

df = df.sort_values(by=['Col1', 'Col2', 'Col3', 'Col4', 'Col5'])

这很好用!但是德语变音不是“德语顺序”,所以 Ä 不在 A 和 B 之间,而是排在 Z 之后。“丹麦”也排在“齐默尔曼”之后,因为 pandas 排序算法似乎是区分大小写的.

我找到了按一个系列 (e. g. here) 对数据框进行排序的解决方案,但没有找到按多个系列排序的解决方案。在所有系列中,变音符号都是可能的。所以我尝试了一点——也许这对某人有帮助。 :-)


解决方案:

df = df.sort_values(by=['Col1', 'Col2', 'Col3', 'Col4', 'Col5'], key=lambda col: col.str.lower().str.normalize('NFD'))

str.lower() 解决了字符串“丹麦”排在“齐默尔曼”之后的问题

str.normalize('NFD') 解决了德语变音符号的问题。

【问题讨论】:

  • 这可行,但如果有混合数字(作为字符串)和单词,它会错误地对数字进行排序。例如,它将 100 排在 20 之前。如何解决?
  • 您能否发布您的“解决方案”作为答案,并接受答案?所以人们知道它已经解决了吗?

标签: python pandas sorting


【解决方案1】:

解决方案作为答案,所以我可以接受它已解决:

df = df.sort_values(by=['Col1', 'Col2', 'Col3', 'Col4', 'Col5'], key=lambda col: col.str.lower().str.normalize('NFD'))

str.lower() 解决了字符串“丹麦”排在“齐默尔曼”之后的问题

str.normalize('NFD') 解决了德语变音符号的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    相关资源
    最近更新 更多