如何删除不以' x'开头的行在Pandas中或保持以' x'开头的行

时间:2016-02-03 19:47:01

标签: python pandas

我整个上午一直在这里,并且慢慢拼凑起来。但是对于我的生活,我无法弄清楚如何在Pandas中使用.str.startswith()函数。

我的XLSX电子表格如下

1 Name, Registration Date, Phone number
2 John Doe, 2015-11-20T19:54:45Z, 1.1112223333
3 Jane Doe, 2015-11-20T20:44:26Z, 65.1112223333
etc...

所以我将它作为数据框导入,清理标题以便没有空格等,然后我想删除任何不以' 1开头的行。' (或保留以' 1开头的行。')并删除所有其他行。所以在这个简短的例子中,删除整个' Jane Doe'因为她的电话号码以' 65开始输入。'

import pandas as pd
df = pd.read_excel('testingpanda.xlsx', sheetname = 'Export 1')
def colHeaderCleaner():
    cols = df.columns
    cols = cols.map(lambda x: x.replace(' ', '_') if isinstance(x, (str, unicode)) else x)
    df.columns = cols
    df.columns = [x.lower() for x in df.columns]

colHeaderCleaner()

#by default it sets the values in 'registrant_phone' as float64, so this is fixing that...
df['registrant_phone'] = df['registrant_phone'].astype('object')

我得到的最接近的,我的意思是我能够执行的唯一一行没有烦人的追溯和其他错误:

df['registrant_phone'] = df['registrant_phone'].str.startswith('1')

但所有这一切都是将所有手机价值转换为“NaN'”,它会维护所有行和所有内容,如下所示:

print df
[output] name, registration_date, phone_number
[output] John Doe, 2015-11-20T19:54:45Z, NaN
[output] Jane Doe, 2015-11-20T20:44:26Z, NaN

我搜索了太多的地方甚至尝试列出,我尝试过不同版本的df.drop,但似乎无法解决任何问题。我从哪里开始?

1 个答案:

答案 0 :(得分:14)

我对你的问题感到有点困惑。在任何情况下,如果您有一个带有df列的DataFrame 'c',并且您想要删除以1开头的项目,那么最安全的方法是使用以下内容:

df = df[~df['c'].astype(str).str.startswith('1')]