【问题标题】:Removing Duplicates from an array in Python depending on the first 4 letters根据前 4 个字母从 Python 中的数组中删除重复项
【发布时间】:2017-06-13 20:21:08
【问题描述】:

我有一个邮政编码列表,例如

DD1 1DB
DD1 5PH
DD10 8JG
DD10 9LJ

我想做的是保留第一个代表,具体取决于邮政编码的第一部分,例如

我需要保留:

DD1 1DB
DD10 8JG

我正在使用 pandas 并将包含列 POSTCODES 的 file.csv 导入为:

df = pandas.read_csv('file.csv')
pc = df.POSTCODES

现在我完全被卡住了。我设法使用 Excel 让它工作(这是更好的选择吗?)但我想学习 python 并决定看看我是否可以在 python 中做到这一点。

【问题讨论】:

  • 请尝试一下。如果您不需要 Pandas DataFrame,您可以使用 Python 轻松完成此操作。查看the Tutorial - 练习给出的示例,最终您将开始获得解决问题的想法。

标签: python arrays pandas


【解决方案1】:

您可以使用df['POSTCODES'].str[:4] 获取前四个字符, 并使用duplicated method 来识别重复项:

In [89]: df.loc[~df['POSTCODES'].str[:4].duplicated(keep='first')]
Out[89]: 
  POSTCODES
0   DD1 1DB
2  DD10 8JG

由于duplicated(keep='first') 将重复项标记为 True,因此我们希望保留的行将标记为 False。所以要选择带有df.loc 的False 行,~ 用于invert the boolean Series

【讨论】:

  • 如果遇到DD100DD101 怎么办?
  • OP 根据前四个字母请求解决方案。但我同意,拆分可能是更好的解决方案。
【解决方案2】:
pc[~pc.POSTCODES.str.split(' ', expand=True)[0].duplicated()]

或 piRSquared 在 cmets 中建议:

pc[~pc.POSTCODES.str.split().str[0].duplicated()]

输出:

  POSTCODES
0   DD1 1DB
2  DD10 8JG

【讨论】:

  • 我喜欢pc[~pc.POSTCODES.str.split().str[0].duplicated()]
【解决方案3】:
In[24]: f = '''\
   ...: DD1 1DB
   ...: DD1 5PH
   ...: DD10 8JG
   ...: DD10 9LJ'''.split('\n')
In[25]: d = {}
   ...: for line in f:
   ...:     left, right = line.split()
   ...:     if left not in d:
   ...:         d[left] = right
   ...: 
In[26]: d
Out[26]: {'DD1': '1DB', 'DD10': '8JG'}

【讨论】:

    猜你喜欢
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 2021-08-15
    • 2016-03-13
    • 2023-04-05
    相关资源
    最近更新 更多