![5f572c27c1953238dd7abad70c49ab94.png](https://img-blog.csdnimg.cn/img_convert/5f572c27c1953238dd7abad70c49ab94.png)
书接上回:
Tao:Python处理数据常用方法(pandas版)2zhuanlan.zhihu.com![719bef1ab0667db20d6e21de4c64897b.png](https://img-blog.csdnimg.cn/img_convert/719bef1ab0667db20d6e21de4c64897b.png)
本文为我日常工作中常用功能的代码块,可以满足绝大部分文本数据处理的需求。
首先导入常用的包
import pandas as pd
本文假设所使用的excel文件目录为 C:/Users/Administrator/Desktop
名称为 test.xlsx
df 为 定义好的Dataframe格式数据
27 保留(YYYY-MM-DD HH:MM:SS)格式中的日期,排除时间
df['时间']=pd.to_datetime(df['时间']).dt.normalize()
源数据及数据格式:
![ce19258da77e8364e199299a307adddc.png](https://img-blog.csdnimg.cn/img_convert/ce19258da77e8364e199299a307adddc.png)
修改后格式:
![150108a3de87cb2ee6dee73e2c3289c6.png](https://img-blog.csdnimg.cn/img_convert/150108a3de87cb2ee6dee73e2c3289c6.png)
28 保留一列中值为数字的行
df[df.金额.apply(lambda x: str(x).isnumeric())]
源数据:
![9ef2a035320d8959d3673770f3e8ca59.png](https://img-blog.csdnimg.cn/img_convert/9ef2a035320d8959d3673770f3e8ca59.png)
修改后:
![de2d8f2dc42043272246a736113a6f49.png](https://img-blog.csdnimg.cn/img_convert/de2d8f2dc42043272246a736113a6f49.png)
29 将存中文数据的dataframe保存到csv中并不乱码
df.to_csv(r'C:/Users/Administrator/Desktop/test.csv',index=False,encoding='utf_8_sig')
源数据:
![4ce794cd3e9eefaa50595b5132f3187b.png](https://img-blog.csdnimg.cn/img_convert/4ce794cd3e9eefaa50595b5132f3187b.png)
导出后:
![7832b9160f1eef0483685512776db3c6.png](https://img-blog.csdnimg.cn/img_convert/7832b9160f1eef0483685512776db3c6.png)
![393a5f3008883d609856992efd5ba0a4.png](https://img-blog.csdnimg.cn/img_convert/393a5f3008883d609856992efd5ba0a4.png)
添加encoding='utf_8_sig'后:
![65e09a5efe6d127b272228f7b314e5bf.png](https://img-blog.csdnimg.cn/img_convert/65e09a5efe6d127b272228f7b314e5bf.png)
![f427eb3e8628667f233a78a888a878eb.png](https://img-blog.csdnimg.cn/img_convert/f427eb3e8628667f233a78a888a878eb.png)
可正常显示中文
30 按照指定字符分列
df = df.drop('A', axis=1).join(df['A'].str.split('+', expand=True).reset_index(drop=True))
源数据:
![4a7215cc1bc3c30c8d90c700a33c0ee2.png](https://img-blog.csdnimg.cn/img_convert/4a7215cc1bc3c30c8d90c700a33c0ee2.png)
分列后:
![079d1bb981e75d3a1b8b4beb64a319e8.png](https://img-blog.csdnimg.cn/img_convert/079d1bb981e75d3a1b8b4beb64a319e8.png)
分列后表头的顺序会变,记得调整顺序和修改列名
31 将dataframe保存至csv文件中,并保持中文
df.to_csv(r'C:UsersAdministratorDesktop目标文件.csv',encoding='utf_8_sig')
先创建一个dataframe:
![409f1ec038901c86b4e56aa382214ae5.png](https://img-blog.csdnimg.cn/img_convert/409f1ec038901c86b4e56aa382214ae5.png)
如果直接将其保存成csv,中文会变成乱码:
![d106f77d151f49420d8f98afc3e6ab6d.png](https://img-blog.csdnimg.cn/img_convert/d106f77d151f49420d8f98afc3e6ab6d.png)
加上 encoding='utf_8_sig' 参数后,中文显示正常
![bf8645176d4f977c5091c3f1ad0232b2.png](https://img-blog.csdnimg.cn/img_convert/bf8645176d4f977c5091c3f1ad0232b2.png)
![9f586e6b9eb02e07683b081a156c81d3.png](https://img-blog.csdnimg.cn/img_convert/9f586e6b9eb02e07683b081a156c81d3.png)
32 将其他格式的数值转化为日期
df['日期']=pd.to_datetime(df['日期'],format="%Y%m%d")
![3361c923ffa879c8adeea018daccbcf0.png](https://img-blog.csdnimg.cn/img_convert/3361c923ffa879c8adeea018daccbcf0.png)
![0dc541ce1de2f8fc05d8e8e8e28535c7.png](https://img-blog.csdnimg.cn/img_convert/0dc541ce1de2f8fc05d8e8e8e28535c7.png)
此时注册日期字段为字符串格式
使用to_datetime()方法:
![36c47d9830e60e2115ef653576906713.png](https://img-blog.csdnimg.cn/img_convert/36c47d9830e60e2115ef653576906713.png)
![f8b2b163f3b5eaba869a25873fe33c0b.png](https://img-blog.csdnimg.cn/img_convert/f8b2b163f3b5eaba869a25873fe33c0b.png)
成功将其转化为日期格式
33 将timedelta格式日期转化为数字
df['使用周期'] = df['使用周期'].map(lambda x: x.days)
参考上一个例子,除了注册日期外我又加了最后登录日期,两个日期之差即为用户的使用周期
![695af6da2cb423c7a1123a56b817cf2e.png](https://img-blog.csdnimg.cn/img_convert/695af6da2cb423c7a1123a56b817cf2e.png)
这时候 使用周期 这一列的数据格式为 timedelta64 ,无法直接和数字做比较
![8f36b4f24bcf81071409dce3789bab52.png](https://img-blog.csdnimg.cn/img_convert/8f36b4f24bcf81071409dce3789bab52.png)
使用timedelta模块自带的days属性可以获得数值型的天数
![a7a7292bc7d0a4417bfdcb65476f0ba5.png](https://img-blog.csdnimg.cn/img_convert/a7a7292bc7d0a4417bfdcb65476f0ba5.png)
34 在DataFrame的指定位置插入指定的一列
DataFrame.insert(loc,column,value,allow_duplicates=False)
loc:想要插入的位置
column:插入的列的列名
value:插入的列的值
allow_duplicates:是否允许重复插入,默认为否
现在有两个dataframe:
第一个login_date:
![0e1b5452e4733f7cf439d632c8b65a7b.png](https://img-blog.csdnimg.cn/img_convert/0e1b5452e4733f7cf439d632c8b65a7b.png)
第二个df:
![0bb32591be06a3c65f1f932150732edd.png](https://img-blog.csdnimg.cn/img_convert/0bb32591be06a3c65f1f932150732edd.png)
现在讲login_date插入到df的第二列中:
![6ee5929b2d3353cb8bd1a17bb06c68e1.png](https://img-blog.csdnimg.cn/img_convert/6ee5929b2d3353cb8bd1a17bb06c68e1.png)
注意第二列的索引是1
这篇先更这么多吧,点赞破20开始下一期~