删除pandas中不包含值的行

时间:2015-11-28 20:31:32

标签: python csv pandas xlsx

我尝试过很多东西,似乎无法获得有效的东西。基本上我有一个XLSX文件,有3列(名称,电子邮件,电话号码),然后是多行。电话号码以不同的国家/地区代码“+ 1.xxxxxxxxxx”“+ 90.xxxxxxxxxx”“+34开头。”我要做的第一件事是删除所有不以“+1”开头的行。并希望通过删除明显虚假和/或不完整的电话号码进一步过滤,例如,有时人们使用'+1.5555555555'或者不给我完整的号码,所以我会得到'+1.12345678'(不是一个完整的10位数字)数字,13,如果你算'+1'。)。完成所有操作后,将其写入.csv。

到目前为止我的代码如下:

import pandas as pd

xl_file = pd.ExcelFile('testexcel.xlsx')
df = xl_file.parse('Sheet 1', index_col='Name', na_values=['NA'])
#df.drop(df.columns[[0]], axis=1, inplace=True)
df = df[df['Phone'] != '+1.*']
df.to_csv('testingpandas.csv')

#df.drop ...组件只是我玩df.dop并整体删除列。下一行是我尝试使用this answer来获得我想要的结果,但我找不到正确的结果。最后的'*'就是我认为的通配符。

最好过滤'+ 1然后写一些东西然后删除行,而该列中的总字符串数不是13?

1 个答案:

答案 0 :(得分:1)

您可以使用pandas索引来过滤掉行,或编写自定义函数。

为了示例,我将展示两种方式,仅保留以+1开头且长度为13的行。

pandas索引:

df = df[(df['Phone'].str.startswith('+1')) & (df['Phone'].str.len() == 13)]

另一种方式,一种自定义方法:

def filter_by_beginning_and_len(phone):
    return str(phone).startswith('+1') and len(str(phone)) == 13

df = df[df['Phone'].apply(filter_by_beginning_and_len)]
相关问题