pandas将字符串转换成时间_数据处理利器 pandas 实例详解 (下)
1.资料转换
1.套用向量化计算(例子依然使用我们采集的房天下的数据)
计算新价格
df['总价'] * 1000
使用 Numpy计算新的价格
np.sqrt() 代表开根号
import numpy as npnp.sqrt(df['总价'])
合并两字符串
df['朝向'] + df['户型']
将新计算的均价存入DataFrame
df['均价'] = df['总价'] * 1000 / df['建筑面积']
2.定义函数进行套用
map:将函数套用到Series 上的每个元素
eg. 移除物业费中的元
def removeDollar(e): return e.split('元')[0]
df['物业费'].map(removeDollar)
eg. 使用匿名函式
df['物业费'].map(lambda e: e.split('元')[0])
Apply:将函数套用到DataFrame 上的行与列
eg:
df = pandas.DataFrame([ [60,70,50],\ [80,79,68],\ [63,66,82]], columns = ['First', 'Second', 'Third'])
# 以列进行计算df.apply(lambda e: e.max() - e.min())
# 以行进行计算df.apply(lambda e: e.max() - e.min(), axis = 1)
ApplyMap:将函式套用到DataFrame上的每个元素(elementwise)
将所有暂无资料的元素替代成缺失值(NaN)
import numpy as npdf.applymap(lambda e :np.nan if e == '暂无资料' else e)
2.处理时间格式资料
打印出现在的时间
from datetime import datetime current_time = datetime.now()
将时间转换成字符串
current_time.strftime('%Y-%m-%d')
将字符串转化为时间
datetime.strptime('2017-04-21', '%Y-%m-%d')
时间回溯
from datetime import timedeltacurrent_time - timedelta(days = 1)
往前回溯10天(这里的适用场景是想取得过去10天的资讯)
for i in range(1, 10): dt = currnet_time - timedelta(days = i) print(dt.strftime('%Y-%m-%d'))
注意:这里的时间转换后的格式可以根据需要设定,eg:dt.strftime('%Y/%m/%d')
1.转换UNIX时间,即从1970年1月1日到现在过了多少秒
将datetime转换为UNIX timestamp
from time import mktimemktime(current_time.timetuple())
将UNIX timestamp 转换为datetime
datetime.fromtimestamp(1492859823)
2.在pandas转换时间
转换前
import pandasdf = pandas.read_excel('data/house_sample.xlsx')df['张贴日期'] = pandas.to_datetime(df['张贴日期'], format = '西元%Y年%m月%d日')
转换后
3.重塑资料
1.虚拟变量(Dummy Variable)
百度百科:
虚拟变量 ( Dummy Variables) 又称虚设变量、名义变量或哑变量,用以反映质的属性的一个人工变量,是量化了的自变量,通常取值为0或1。引入哑变量可使线形回归模型变得更复杂,但对问题描述更简明,一个方程能达到两个方程的作用,而且接近现实。
eg:如下表中的朝向就可以建立一个虚拟变量
建立虚拟变量
pandas.get_dummies(df['朝向'])
合并虚拟变量与原DataFrame
df = pandas.concat([df, pandas.get_dummies(df['朝向'])], axis = 1)
舍弃原有字段
df.drop('朝向', axis = 1)
2.建立透视表(pivot_table)
df2 = df.pivot_table(index = '张贴日期', columns = '产权性质', values = '总价', aggfunc = sum, fill_value = 0) # fill_value = 0 指代的是把NaN替换成0df2.head()
df3 = df.pivot_table(index = '产权性质', columns = '张贴日期', values = '总价', aggfunc = sum)df3.head()
另外,两者进行转换的话也可以直接通过df2.T
做转换。
3.长宽表格的转换(stack & unstack)
建立多索引的透视表
df_multi_idx = df.pivot_table(index=['楼层', '装修'],columns='张贴日期', values='总价', aggfunc=sum)
转换为宽表格
df_wide = df_multi_idx.unstack()df_wide.head()
转换为长表格
df_long = df_wide.stack()df_long.head()
4.学习正则表达式
1.正则表达式概述
正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。可以参考我之前写过得文章。从0开始学正则,让正则成为你的解析利器
Regular Expression的“Regular”一般被译为“正则”、“正规”、“常规”。此处的“Regular”即是“规则”、“规律”的意思,Regular Expression即“描述某种规则的表达式”之意。
Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先使用re.compile()函数,将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。
1.正则表达式(Regular Expression):查询和匹配字符串的规则
2.正则表达式表示数据
普通字符: 元数据,可以用于匹配指定的字符r = “a”:用于在目标字符串中匹配小写字母a元字符r = “.”:用于匹配任意一个字符r = “\”:转移字符~用于将一个普通的字符,转义成一个有意义的字符r = “\d”:表示一个0~9之间的整数r = “\D”:表示一个非数字字符r = “\w”:表示任意一个0~9或者字母或者下划线的字符r = “\W”:表示任意一个特殊字符r = “\s”:表示匹配一个空白字符r = “\S”:表示匹配一个非空白字符r = “^”:匹配字符串的开头位置r = “$”:匹配字符串的结束位置r = “\d*”:表示前面匹配的字符出现了0次或者多次r = “\d?”:表示前面匹配的字符出现了0次或者1次r =”\d+”:表示前面匹配的字符出现了1次或者多次
#范围匹配分组匹配方式:将多个匹配字符当成一个完整的匹配公式(abc):用于在目标字符串中查询abc同时出现的地方 选择匹配方式:将指定的多个字符,选择其中一个进行匹配[abc]:用于在目标字符串中,查询a或者b或者c出现的地方[0-9]:用于匹配一个0~9之间的数字->等价于\d[a-z]:用于匹配一个a-z之间的字母[A-Z]:用于匹配一个A-Z之间的字母[a-zA-Z]:用于匹配一个字母【大小写均可】[a-zA-Z0-9_]:用于匹配一个非特殊字符,等价于\w
#范围匹配\d{m, n}:匹配到的字符出现了至少m次,最多n次\d{,20}:匹配一个数字最多出现20次\d{8,}:匹配一个数字,最少出现8次\d{8,16}:匹配一个数字,最少出现8次,最多出现16次
#正则表达式在python中的使用正则表达式,在python中,主要用到了一个re模块compile():编译正则表达式pattern = re.compile(“^\d{2,}$”)pattern = r‘^\d{2,}$’
pattern.match(str,begin,end):从指定的字符串str第一个字符查询匹配的字符
pattern.search(str, begin, end):从指定的字符串中直接进行查询,查询到的第一个结果作为匹配结果
pattern.findall(str):从指定的字符串中,查询符合匹配规则的字符,将所有符合的字符存放在一个列表中
pattern.finditer(str):从指定的字符串中,查询符合匹配规则的字符保存在一个可以迭代的对象中
pattern.sub():替换pattern.split():拆分
eg:
import reemail = 'zhiji@github.com'm = re.match('(\w+)@([a-z\.]+)', email)orm = re.match('(\w+)@(.+)', email)>>>m.group(1)zhiji>>>m.group(2)github.com>>>m.groups()('zhiji', 'github.com')
2.在DataFrame上使用正规表达式
从户型用正规表达式抽取室、厅、厨、卫栏位
df[['室', '厅', '厨', '卫']] = df['户型'].str.extract('(\d+)室(\d+)厅(\d+)厨(\d+)卫', expand=False)
之前写过详细的正则表达式的文章,传送门在这里正则表达式。
5.实例处理
我们通过对新浪微博新闻数据的采集和处理作为案例
import requestsimport pandasimport refrom bs4 import BeautifulSoup
def get_article(url): res1 = requests.get(url) res1.encoding = 'utf-8' soup1 = BeautifulSoup(res1.text, 'html.parser') dic = {} dic['title'] = soup1.select('.page-header #artibodyTitle')[0].text dic['content'] = ''.join([ele.text for ele in soup1.select('.article_16 p')]) dic['source'] = soup1.select('#navtimeSource')[0].text dic['keyword'] = soup1.select('.article-info .article-keywords')[0].text return dic
def get_all_news(): res = requests.get('http://news.sina.com.cn/china/') res.encoding = 'utf-8' soup = BeautifulSoup(res.text, 'html.parser') newsary = [] for link in soup.select('.news-item'): if len(link.select('h2 a')) > 0: newsary.append(get_article(link.select('h2 a')[0]['href'])) df = pandas.DataFrame(newsary) # 进行数据清理 df['keyword'] = df['keyword'].map(lambda e: e.split(':')[1].split()) # df['source'] = df['source'].map(lambda e: e.split()) df[['datetime', 'from']] = df['source'].str.extract('(\d+年\d+月\d+日\d+:\d+)[\t|\n]+?(\w+)', expand=False) print(df[['datetime', 'from']]) # 因为df['datetime']是object格式,为了后期的取值,例:取年df['datetime'].map(lambda e : e.year) 我们需要把格式转换为时间格式 df['datetime'] = pandas.to_datetime(df['datetime'], format = '%Y年%m月%d日%H:%M') del df['source'] # 对即将保存的格式进行调整 df = df[['from', 'title', 'content', 'keyword', 'datetime']] # 将整理好的数据储存Excel df.to_excel('news.xlsx')
if __name__ == '__main__': get_all_news()
pandas将字符串转换成时间_数据处理利器 pandas 实例详解 (下)相关推荐
- pandas将字符串转换成时间_pandas入门: 时间字符串转换为年月日
pandas中时间字符串转换为年月日方法总结.创建一个dataframe df = pd.DataFrame(['2019-12-09', '2019-12-02'], columns=[" ...
- c语言字 字符串转换成数组_C语言学习教程之详解C语言中的字符串数组
在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include 总结 以上 ...
- 在java中如何把字符串转换成时间格式?
在java中如何把字符串转换成时间格式? 检举 | 2007-11-28 17:26 提问者:baixiao429 | 悬赏分:20 | 浏览次数:6645次 有这样一个字符串:"20070 ...
- 【0513】 将字符串转换成时间格式
1.1.将字符串转换成时间格式(to_date) 语法:to_date(需要转换的字符串,字符串对应的格式) 字符串类型: char:固定长度,0-255个字符,默认值1: varchar:可变长度, ...
- java字符串转换成时间Could not parse date: Unparseable date: 2018-12-28]
在做项目时java字符串转换成时间报如下错误: Could not parse date: Unparseable date: "2018-12-28"] 后面发现是SpringM ...
- [转帖]什么是“可转换可赎回优先股”?小米集团实例详解
什么是"可转换可赎回优先股"?小米集团实例详解 2018-08-15 17:13:39 来源:优先股 本篇文章有7773字,看完大约需要26分钟的时间 https://www. ...
- python unix时间戳转换成时间_关于python:将unix时间戳字符串转换为可读日期
我有一个用python表示unix时间戳(即"1284101485")的字符串,我想把它转换成一个可读的日期.当我使用time.strftime时,我得到一个TypeError: ...
- ping 超时时间_华为交换机ping命令详解
1.Ping简介 Ping是排除设备访问故障的常见方法.它使用Internet控制消息协议ICMP(Internet Control Message Protocol)确定以下内容: 远程设备是否处于 ...
- 十字路口红绿灯plc程序_西门子PLC编程实例详解十字路口交通灯自动控制系统!...
知识点和关键字:定时器 触点比较指令 传送指令 变址应用 数据块 控制要求 示意图 时序图 工艺流程图 当该路口是红灯时,另外一个路口是通行时间,绿灯亮和黄灯闪亮: 当另外一个路口转红灯时,该 ...
- angular 字符串转换成数字_一文看懂Python列表、元组和字符串操作
好文推荐,转自CSDN,原作星辰StarDust,感觉写的比自己清晰-大江狗荐语. 序列 序列是具有索引和切片能力的集合. 列表.元组和字符串具有通过索引访问某个具体的值,或通过切片返回一段切片的能力 ...
最新文章
- 微服务失败的11个原因
- Spring-AOP @AspectJ切点函数之target()和this()
- python:Anaconda+Pycharm Community版+Django搭建属于自己简易WEB
- oracle 实例用法,Oracle merge into用法以及相关例子示例
- C语言和C++中的struct 和typedef struct
- JAVA 常用框架和工具
- java spring框架文件上传_spring系列---Security 安全框架使用和文件上传FastDFS
- swift 可选链_Swift可选链
- 好记心不如烂笔头之JQuery学习,第四章
- 能源在线监测管理系统
- Python单元测试报告框架PyTestReport
- 2021奥维地图不能用了,有没有其他地图软件能替代?
- 用友NC总账辅助余额表与应收应付模块余额表对账技巧
- 熊博士c语言,InstallShield2015制作安装包----------安装后实现电脑开机自启动
- 计算机硬件系统维护经验与体会,计算机操作系统维护与优化的实训报告心得体会.docx...
- MongoDB4.4.2安装记录及无法启动踩坑
- 追寻着最初的梦想,我们上路吧
- 连接数据库——模拟ATM机查、存、取、开户功能
- 017利用颅内和头皮脑电图进行癫痫预测的卷积神经网络2018
- 角谷猜想(次数+过程)