pandas的一些知识点记录。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/soulwyb/article/details/88360726

主要是前两天公司同事希望我帮忙弄一个从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

猜你喜欢

转载自blog.csdn.net/soulwyb/article/details/88360726