一种干净的方法来正确检查df中的电话号码是否为假

时间:2019-02-01 16:31:30

标签: python pandas dataframe

让我们说我有一个像这样的数据框

id  phone_number  
0   5555555555
1   9082345324
2   2345098345

我想用一个简单的说法或一种简洁的说法:

  • 如果数字全都相同,请将其删除

输出应如下所示:

id  phone_number  
1   9082345324
2   2345098345

我的方法是使用iterrows(),并将每个电话号码的每个数字都放入列表中,然后使用lst[1:] == lst[:-1]交叉比较列表以查看所有数字是否相同。如果是这样,请从DF中删除该行。我只想要一个更干净的解决方案

2 个答案:

答案 0 :(得分:4)

您可以使用set并检查长度

df[df.phone_number.apply(set).str.len().gt(1)]

  id phone_number
1  1   9082345324
2  2   2345098345

等同于理解力

df[[len({*x}) > 1 for x in df.phone_number]]

如果这些是实际整数

df[df.phone_number.astype(str).apply(set).str.len().gt(1)]
# df[[len({*str(x)}) > 1 for x in df.phone_number]]

进一步的项目符号校对,假设其中可能没有数字

df[df.phone_number.astype(str).replace('\D', '').apply(set).str.len().gt(1)]

答案 1 :(得分:1)

首先,将电话号码转换为字符串(如果尚未转换)。然后,您需要检查电话号码中第一个character的出现次数。如果与电话号码的长度匹配,则应删除该记录。

df.phone_number = df.phone_number.apply(str)
df = df.loc[~df['phone_number'].apply(lambda x: x.count(x[0]) == len(x))]

输出:

id  phone_number
1   1   9082345324
2   2   2345098345