概述
主要是前两天公司同事希望我帮忙弄一个从Excel表格中筛出手机号。所以就由此出现的一些问题处理,写的不好还望各位python大佬指点一二:
1.选择DataFrame对象中的某列:
tel = df.iloc[:, col_index]
使用切片的方式就可以选择相对应的列了。 大概说明下。这里前面的':'是切处所有的行,后面一个参数就是列的下标
具体可看官方文档:
http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iloc.html#pandas.DataFrame.iloc
那反过来讲 df.iloc[row,:]就是选取指定行咯。 意思是一样的。
对了 返回的是一个Series对象。
2. 过滤Series对象中的数据:
使用Series.str.extract()函数就可以解决。
phone = tel.str.extract(r'(^d{11}$)', expand=False)
通过正则表达式就能够得到每行数据是否是手机号了(这里不检查手机号前三位是否真实有效)。后面的expand表示返回的是Series对象还是DataFrame对象
返回的对象并不会将不符合正则表达式的行去掉。而是替换成NaN。这里要注意下。
该函数的官方文档说明:
http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.extract.html#pandas.Series.str.extract
3.去掉讨人厌的NaN
在前面第二点的时候说到。Series.str.extract()返回的Series对象会将不符合规则的字段值改成NaN返回。但是,我这里的需求是要把这些不符合要求的数据删除掉。所以,我还需要另一个函数:
Series.dropna()
这货可以将Series对象中NaN删除 返回一个干净的Series对象。
具体操作就是这样:
phone = tel.str.extract(r'(^d{11}$)', expand=False).dropna()
或者可以这样tel.str.extract(r'(^d{11}$)', expand=False).dropna(inplace=True)
这表示就地处理,直接改变tel对象的数据。而不需要再另外返回新的对象。
当然,也可以指定列的下标来指定处理某列的NaN:
Series.dropna(axis=0, inplace = True)
官方文档:
http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.dropna.html#pandas.Series.dropna
4. 到处到Excel表格
单独的Series对象也可以直接导出到Excel。 使用:
phone.to_excel(self.target_file, header=False, index=False)
表示去头去序号。 这个没啥太多的疑问,只需要看官方文档就知道怎么操作了
http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.to_excel.html#pandas.Series.to_excel
最后
以上就是鲤鱼洋葱为你收集整理的pandas的一些知识点记录。的全部内容,希望文章能够帮你解决pandas的一些知识点记录。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复