我有一个邮政编码列表,例如
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中完成它。
答案 0 :(得分:4)
您可以使用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
的假行,~
将用于invert the boolean Series。
答案 1 :(得分:2)
pc[~pc.POSTCODES.str.split(' ', expand=True)[0].duplicated()]
正如piRSquared在评论中所暗示的那样:
pc[~pc.POSTCODES.str.split().str[0].duplicated()]
输出:
POSTCODES
0 DD1 1DB
2 DD10 8JG
答案 2 :(得分:0)
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'}