使用熊猫一次将多个城市名称格式化为每个城市的通用名称

时间:2019-09-11 05:16:47

标签: 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": "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

是否可以将每个城市更改为通用名称?

2 个答案:

答案 0 :(得分:1)

转换为较低的唯一值,映射和计数:

数据:

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

转换为较低:

df.City = df.City.str.lower()

     City  b  c
 new york  1  1
 new york  2  2
     n.y.  3  3
       ny  4  4
  toronto  3  2
       to  3  2
  toronto  3  2

唯一值:

df.City.unique()

array(['new york', 'n.y.', 'ny', 'toronto', 'to'], dtype=object)

映射城市名称:

cities_tup = (('New York', ['ny', 'n.y.', 'new york']),
              ('Toronto', ['toronto', 'to']))

cities_map = {y:x[0] for x in cities_tup for y in x[1]}

{'ny': 'New York',
 'n.y.': 'New York',
 'new york': 'New York',
 'toronto': 'Toronto',
 'to': 'Toronto'}

df.City = df.City.map(cities_map)

     City  b  c
 New York  1  1
 New York  2  2
 New York  3  3
 New York  4  4
  Toronto  3  2
  Toronto  3  2
  Toronto  3  2

要验证的唯一计数:

df.City.value_counts()

New York    4
Toronto     3
Name: City, dtype: int64

备注

  • 毫无疑问,还有其他方法可以完成此任务,但是我认为这很简单并且易于理解。
    • 可能有人会提供一线服务。

答案 1 :(得分:0)

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