我整个上午一直在这里,并且慢慢拼凑起来。但是对于我的生活,我无法弄清楚如何在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,但似乎无法解决任何问题。我从哪里开始?
答案 0 :(得分:14)
我对你的问题感到有点困惑。在任何情况下,如果您有一个带有df
列的DataFrame 'c'
,并且您想要删除以1
开头的项目,那么最安全的方法是使用以下内容:
df = df[~df['c'].astype(str).str.startswith('1')]