Python 使用pandas将多个城市名称格式化为每个城市的通用名称

Python 使用pandas将多个城市名称格式化为每个城市的通用名称,python,pandas,Python,Pandas,将所有城市名称更改为一个通用名称 City b c 0 New york 1 1 1 New York 2 2 2 N.Y. 3 3 3 NY 4 4 它们称为纽约市,但python将它们视为单独的实体,因此我将它们全部改为一个 df["City"] = df["City"].replace({"N.Y.":"New york", "New York": "New york", "NY": "

将所有城市名称更改为一个通用名称

        City    b   c
0   New york    1   1
1   New York    2   2
2   N.Y.        3   3
3   NY          4   4
它们称为纽约市,但python将它们视为单独的实体,因此我将它们全部改为一个

df["City"] = df["City"].replace({"N.Y.":"New york", "New York": "New york", "NY": "New york"})
在这之后,我需要检查纽约的所有变化是否都包括在内,为此我创建了一个函数

def universal_ok(universal_name):
    count = 0
    for c in df.City:
        if c == universal_name:
            count += 1

    # This only works when column consists of only one type of city
    if count == len(df.City):
        return "Yes all names are formatted correctly"
    else:
        return f"there are {len(df.City) - count} names that need to be changed"

universal_ok("New york")
但问题是,如果一列中有多个城市,该怎么办

    City        b   c
0   New york    1   1
1   New York    2   2
2   N.Y.        3   3
3   NY          4   4
4   Toronto     3   2
5   TO          3   2
6   toronto     3   2

是否有办法将每个城市更改为通用名称?

您需要一个带有某种城市id的特定列,否则您将无法区分巴黎、法国和德克萨斯州巴黎,也无法将伊斯坦布尔和君士坦丁堡分组。

转换为较低的唯一值、地图和计数: 数据: 城市b c 纽约11 纽约2 2 纽约3 3 纽约4 多伦多32 至3 2 多伦多32 转换为较低的: 这将减少城市名称的变化。 df.City=df.City.str.lower 城市b c 纽约11 纽约2 2 n、 y.3 3 纽约4 多伦多32 至3 2 多伦多32 唯一值: 这将为您提供列中的所有值 独特城市 数组['new york','n.y.','ny','toronto','to'],dtype=object 绘制城市名称地图: 使用“唯一值”列表将值映射到首选形式 我创建了一个元组,然后使用dict comprehension创建了字典 我这样做了,这样我就不必重复输入首选的城市名称,因为这样我很懒/效率高。 城市图=‘纽约’、[‘纽约’、‘纽约’、‘纽约’], '多伦多',['多伦多','至'] 城市地图={y:x[0]表示城市中的x\u tup表示城市中的y[1]} {'ny':'纽约', “纽约”:“纽约”, ‘纽约’:‘纽约’, ‘多伦多’:‘多伦多’, '收件人':'多伦多'} df.City=df.City.map城市\地图 城市b c 纽约11 纽约2 2 纽约3 3 纽约4 4 多伦多32 多伦多32 多伦多32 要验证的唯一计数: 验证城市名称是否已更新并计数 df.City.value\u计数 纽约4 多伦多3 名称:城市,数据类型:int64 评论 毫无疑问,有其他方法来完成这项任务,但我认为这是简单易懂的。 可能会有人来提供一个班轮。 我不认为这个任务真的是关于熊猫的。您首先需要构建一些将缩写和任何类型的短名称映射到专有名称的dict。此外,通用名称到底是什么?N.Y也可以代表,但熊猫或更一般的计算机在没有任何指示的情况下永远无法区分: