04_pandas字符串函数;数据合并concat、merge;分组groupby;Reshaping;Pivot tables;时间处理(date_range、tz_localize等)
字符串函数,Series的lower()函数
Series在str属性中提供了一组字符串处理方法,可以方便地对数组中的每个元素进行操作,如下面的代码片段所示。请注意,str中的模式匹配通常默认使用正则表达式(在某些情况下总是使用正则表达式)
import numpy as np
import pandas as pds = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'])
print(s.str.lower())
输出结果为:
0 a
1 b
2 c
3 aaba
4 baca
5 NaN
6 caba
7 dog
8 cat
dtype: object
数据合并
concat
import numpy as np
import pandas as pddf = pd.DataFrame(np.random.randn(10,4))
print(df)print("------------------------------------")
print(df[:3])
#pieces = [df[]]
print("------------------------------------")
print(df[3:7])
print("------------------------------------")
print(df[7:])pieces = [df[:3],df[3:7],df[7:]]
print("------------------------------------")
print(pieces)
print(pd.concat(pieces))
输出结果:
0 1 2 3
0 1.190317 0.751029 1.628000 -0.923804
1 0.926196 1.644827 -1.005915 -0.153604
2 -1.082964 -0.684693 -0.087294 0.707919
3 -0.418695 2.392404 1.020161 0.928821
4 0.798035 -0.458987 -0.612861 0.589815
5 0.749647 -0.939293 -1.883342 -1.408095
6 0.045482 2.362426 -0.792240 -0.127324
7 0.881938 -1.667338 -0.147447 0.529441
8 -1.768780 -1.513335 -0.014616 0.373453
9 -0.553334 -0.066471 -0.367330 -0.815094
------------------------------------0 1 2 3
0 1.190317 0.751029 1.628000 -0.923804
1 0.926196 1.644827 -1.005915 -0.153604
2 -1.082964 -0.684693 -0.087294 0.707919
------------------------------------0 1 2 3
3 -0.418695 2.392404 1.020161 0.928821
4 0.798035 -0.458987 -0.612861 0.589815
5 0.749647 -0.939293 -1.883342 -1.408095
6 0.045482 2.362426 -0.792240 -0.127324
------------------------------------0 1 2 3
7 0.881938 -1.667338 -0.147447 0.529441
8 -1.768780 -1.513335 -0.014616 0.373453
9 -0.553334 -0.066471 -0.367330 -0.815094
------------------------------------
[ 0 1 2 3
0 1.190317 0.751029 1.628000 -0.923804
1 0.926196 1.644827 -1.005915 -0.153604
2 -1.082964 -0.684693 -0.087294 0.707919, 0 1 2 3
3 -0.418695 2.392404 1.020161 0.928821
4 0.798035 -0.458987 -0.612861 0.589815
5 0.749647 -0.939293 -1.883342 -1.408095
6 0.045482 2.362426 -0.792240 -0.127324, 0 1 2 3
7 0.881938 -1.667338 -0.147447 0.529441
8 -1.768780 -1.513335 -0.014616 0.373453
9 -0.553334 -0.066471 -0.367330 -0.815094]0 1 2 3
0 1.190317 0.751029 1.628000 -0.923804
1 0.926196 1.644827 -1.005915 -0.153604
2 -1.082964 -0.684693 -0.087294 0.707919
3 -0.418695 2.392404 1.020161 0.928821
4 0.798035 -0.458987 -0.612861 0.589815
5 0.749647 -0.939293 -1.883342 -1.408095
6 0.045482 2.362426 -0.792240 -0.127324
7 0.881938 -1.667338 -0.147447 0.529441
8 -1.768780 -1.513335 -0.014616 0.373453
9 -0.553334 -0.066471 -0.367330 -0.815094
merge
import numpy as np
import pandas as pdleft = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})
print(left)right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})
print(right)
print(pd.merge(left,right,on='key'))
输出结果为:
key lval
0 foo 1
1 foo 2key rval
0 foo 4
1 foo 5key lval rval
0 foo 1 4
1 foo 1 5
2 foo 2 4
3 foo 2 5
分组
groupby
按照指定列进行分组,有点类似sql语句里面的分组的概念的样子
import numpy as np
import pandas as pddf = pd.DataFrame({'A':['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],'B':['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],'C':np.random.randn(8),'D':np.random.randn(8)})
print(df)
print("-----------------------------------")
print(df.groupby('A').sum())
print("-----------------------------------")
print(df.groupby(['A', 'B']).sum())
输出结果为:
A B C D
0 foo one -0.411487 -0.908131
1 bar one 0.803172 -0.093416
2 foo two 0.079114 -0.594352
3 bar three -1.423867 -0.025747
4 foo two 0.832108 0.818305
5 bar two 0.551068 -0.859953
6 foo one -1.052481 -0.220297
7 foo three -2.639817 0.402972
-----------------------------------C D
A
bar -0.069626 -0.979116
foo -3.192563 -0.501502
-----------------------------------C D
A B
bar one 0.803172 -0.093416three -1.423867 -0.025747two 0.551068 -0.859953
foo one -1.463968 -1.128427three -2.639817 0.402972two 0.911223 0.223953
Reshaping
import numpy as np
import pandas as pdtuples = list(zip(*[['bar', 'bar', 'baz', 'baz','foo', 'foo', 'qux', 'qux'],['one', 'two', 'one', 'two','one', 'two', 'one', 'two']]))index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
print(index)
df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B'])df2 = df[:4]
print(df2)
print("---------df2.stack()------------------")
stacked = df2.stack()
print(stacked)print("---------stacked.unstack()------------")
print(stacked.unstack())print("---------stacked.unstack(1)-----------")
print(stacked.unstack(1))print("---------stacked.unstack(0)-----------")
print(stacked.unstack(0))
输出结果为 :
MultiIndex([('bar', 'one'),('bar', 'two'),('baz', 'one'),('baz', 'two'),('foo', 'one'),('foo', 'two'),('qux', 'one'),('qux', 'two')],names=['first', 'second'])A B
first second
bar one 0.189887 0.637367two -0.341858 -0.895612
baz one 0.517839 -0.798281two -0.712129 -1.355618
---------df2.stack()------------------
first second
bar one A 0.189887B 0.637367two A -0.341858B -0.895612
baz one A 0.517839B -0.798281two A -0.712129B -1.355618
dtype: float64
---------stacked.unstack()------------A B
first second
bar one 0.189887 0.637367two -0.341858 -0.895612
baz one 0.517839 -0.798281two -0.712129 -1.355618
---------stacked.unstack(1)-----------
second one two
first
bar A 0.189887 -0.341858B 0.637367 -0.895612
baz A 0.517839 -0.712129B -0.798281 -1.355618
---------stacked.unstack(0)-----------
first bar baz
second
one A 0.189887 0.517839B 0.637367 -0.798281
two A -0.341858 -0.712129B -0.895612 -1.355618
Pivot tables
import numpy as np
import pandas as pddf = pd.DataFrame({'A': ['one', 'one', 'two', 'three'] * 3,'B':['A','B','C'] * 4,'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2,'D':np.random.randn(12),'E':np.random.randn(12)})print(df)
print("-------------------------------")
print(pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C']))
输出结果为:
A B C D E
0 one A foo -0.282109 1.696844
1 one B foo 0.715732 0.283795
2 two C foo 0.889333 0.621878
3 three A bar -1.065137 1.184847
4 one B bar 0.420288 -0.299934
5 one C bar -1.269725 -1.261542
6 two A foo 1.142230 1.887502
7 three B foo -0.456574 0.650669
8 one C foo -0.146470 -0.307011
9 one A bar 0.944573 0.967164
10 two B bar 0.432492 -0.554618
11 three C bar -1.928619 -1.158268
-------------------------------
C bar foo
A B
one A 0.944573 -0.282109B 0.420288 0.715732C -1.269725 -0.146470
three A -1.065137 NaNB NaN -0.456574C -1.928619 NaN
two A NaN 1.142230B 0.432492 NaNC NaN 0.889333
时间处理
panda具有在频率转换期间执行重采样操作的简单、强大和高效的功能(例如,,将第二个数据转换为5分钟数据)。这在金融应用程序中非常常见,但不限于此。
import numpy as np
import pandas as pdrng = pd.date_range('1/1/2012',periods=100,freq='S')
ts = pd.Series(np.random.randint(0,500,len(rng)),index=rng)
print(ts.resample('5Min').sum())print("---------------------date_range-------------------------")rng = pd.date_range('3/6/2012 00:00',periods=5,freq='D')
ts = pd.Series(np.random.randn(len(rng)),rng)
print(ts)print("----------------------tz_localize-----------------------")
ts_utc = ts.tz_localize('UTC')
print(ts_utc)print("------------转换成其它时区的值---------------------------")
print(ts_utc.tz_convert('US/Eastern'))print("------------在时间跨度表示之间进行转换-------------------")
rng = pd.date_range('1/1/2012',periods=5,freq='M')
ts = pd.Series(np.random.randn(len(rng)),index=rng)
print(ts)print("----------------to_period------------------------------")
ps = ts.to_period()
print(ts)print("----------------to_timestamp---------------------------")
print(ps.to_timestamp())print("------------------------------------------------------")
prng = pd.period_range('1990Q1', '2000Q4', freq='Q-NOV')
ts = pd.Series(np.random.randn(len(prng)), prng)
ts.index = (prng.asfreq('M', 'e') + 1).asfreq('H', 's') + 9
print(ts.head())
输出结果为:
2012-01-01 24102
Freq: 5T, dtype: int32
---------------------date_range-------------------------
2012-03-06 0.059085
2012-03-07 0.216838
2012-03-08 -1.465363
2012-03-09 -0.349098
2012-03-10 -0.818129
Freq: D, dtype: float64
----------------------tz_localize-----------------------
2012-03-06 00:00:00+00:00 0.059085
2012-03-07 00:00:00+00:00 0.216838
2012-03-08 00:00:00+00:00 -1.465363
2012-03-09 00:00:00+00:00 -0.349098
2012-03-10 00:00:00+00:00 -0.818129
Freq: D, dtype: float64
------------转换成其它时区的值---------------------------
2012-03-05 19:00:00-05:00 0.059085
2012-03-06 19:00:00-05:00 0.216838
2012-03-07 19:00:00-05:00 -1.465363
2012-03-08 19:00:00-05:00 -0.349098
2012-03-09 19:00:00-05:00 -0.818129
Freq: D, dtype: float64
------------在时间跨度表示之间进行转换-------------------
2012-01-31 -0.682776
2012-02-29 0.895222
2012-03-31 -0.162116
2012-04-30 -1.175630
2012-05-31 -0.936218
Freq: M, dtype: float64
----------------to_period------------------------------
2012-01-31 -0.682776
2012-02-29 0.895222
2012-03-31 -0.162116
2012-04-30 -1.175630
2012-05-31 -0.936218
Freq: M, dtype: float64
----------------to_timestamp---------------------------
2012-01-01 -0.682776
2012-02-01 0.895222
2012-03-01 -0.162116
2012-04-01 -1.175630
2012-05-01 -0.936218
Freq: MS, dtype: float64
------------------------------------------------------
1990-03-01 09:00 1.847485
1990-06-01 09:00 -0.909369
1990-09-01 09:00 1.381791
1990-12-01 09:00 0.997901
1991-03-01 09:00 1.470387
Freq: H, dtype: float64
Categoricals
在pandas的DataFrame中包括categorical 数据.
import numpy as np
import pandas as pddf = pd.DataFrame({"id": [1, 2, 3, 4, 5, 6],"raw_grade":['a','b','b','a','a','e']})print("-----------将原始等级转换为分类数据类型-------------")
df["grade"] = df["raw_grade"].astype("category")
print(df["grade"])# 重新命名这个分类范畴为更有意义的名字
print("-------重新命名这个分类范畴为更有意义的名字----------")
df["grade"].cat.categories = ["very good", "good", "very bad"]
df["grade"] = df["grade"].cat.set_categories(["very bad", "bad", "medium","good","very good"])
print(df["grade"])print("-----按照分类中的[very bad, bad, medium, good, very good]范畴进行排序----")
print(df.sort_values(by="grade"))print("-----按照分类中的[very bad, bad, medium, good, very good]范畴进行排序,并且显示空数据的值----")
print(df.groupby('grade').size())
输出结果:
-----------将原始等级转换为分类数据类型-------------
0 a
1 b
2 b
3 a
4 a
5 e
Name: grade, dtype: category
Categories (3, object): [a, b, e]
-------重新命名这个分类范畴为更有意义的名字----------
0 very good
1 good
2 good
3 very good
4 very good
5 very bad
Name: grade, dtype: category
Categories (5, object): [very bad, bad, medium, good, very good]
-----按照分类中的[very bad, bad, medium, good, very good]范畴进行排序----id raw_grade grade
5 6 e very bad
1 2 b good
2 3 b good
0 1 a very good
3 4 a very good
4 5 a very good
-----按照分类中的[very bad, bad, medium, good, very good]范畴进行排序,并且显示空数据的值----
grade
very bad 1
bad 0
medium 0
good 2
very good 3
dtype: int64
04_pandas字符串函数;数据合并concat、merge;分组groupby;Reshaping;Pivot tables;时间处理(date_range、tz_localize等)相关推荐
- 【数据科学】05 数据合并(merge、concat、combine)与数据清洗(缺失值、重复值、内容和格式)
文章目录 1. 数据合并 1.1 merge()合并 1.2 concat()合并 1.3 combine()合并 2. 数据清洗 2.1 缺失值 2.2 重复值 2.3 内容与格式清洗 1. 数据合 ...
- Reactor 3 (10): 数据合并concat、merge
由于业务需求有的时候需要将多个数据源进行合并,Reactor提供了concat方法和merge方法: concat方法示意图: merge方法示意图: 从图中可以很清楚的看出这两种合并方法的不同: c ...
- Pandas 中DataFrame 数据合并 Contract | Merge
最近在工作中,遇到了数据合并.连接的问题,故整理如下,供需要者参考~ 参考自:象在舞:https://blog.csdn.net/gdkyxy2013/article/details/80785361 ...
- OpenCv——merge()函数数据合并
函数原型:merge(tup) merge常用于RGB通道图的合并 tup必须是numpy数组 import numpy as np import matplotlib.pyplot as plt i ...
- [Pandas] 数据合并 pd.merge
实现类似SQL的join操作,通过pd.merge()方法可以自由灵活地操作各种逻辑的数据连接.合并等操作 可以将两个DataFrame或Series合并,最终返回一个合并后的DataFrame 语法 ...
- pandas相关函数sort_values、字符串处理、index、merge、数据合并cancat、groupby分组统计
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.排序函数sort_values() 二.字符串处理 1.介绍 2.代码介绍 3.Categorical类型降低数据 ...
- Python之数据合并——【concat()函数、merge()函数、join()方法、combine_first()方法】
文章目录 轴向堆叠数据--concat()函数 横向堆叠与外连接 纵向堆叠与内连接 主键合并数据--merge()函数 内连接方式 外连接方式 左连接方式 右连接方式 其他 根据行索引合并数据--jo ...
- 【Python数据分析】之数据合并的concat函数与merge函数
文章目录 系列文章 一.concat函数 1)横向堆叠与外连接 横向堆叠合并df1和df2,采用==外连接==的方式 2) 纵向堆叠与内链接 二.merge()函数 1)根据行索引合并数据 2)合并重 ...
- 数据合并之concat、append、merge和join
Pandas 是一套用于 Python 的快速.高效的数据分析工具.它可以用于数据挖掘和数据分析,同时也提供数据清洗功能.本文将详细讲解数据合并与连接,目录如下: ① concat 一.定义 conc ...
最新文章
- 大型门户网站架构设计的可伸缩性
- 怎么复制黑苹果config配置_估计是最后一次折腾黑苹果,技嘉 Z490 Vision D 的 OC 配置分享...
- 容器日志采集利器Log-Pilot
- 基于TensorFlow,人声识别如何在端上实现?
- java(5)——数据类型中的字符型和布尔类型
- fpga中wire和reg的区别
- 一位40岁“老程序员”的经历,给你们说一些我的真实想法!
- MySQL数据库的优化-运维架构师必会高薪技能,笔者近六年来一线城市工作实战经验...
- 高级JAVA - 动态代理的实现原理和源码分析
- 字符串流 ostrstream 和 istrstream
- 大魔王覃超解说 2017 Google I/O丨今晚直播!
- 基于javaweb的音乐网站
- java api1.8中文版(由谷歌,百度,有道,必应翻译).md
- xxnet 360浏览器设置
- 中秋节快乐ooooo
- c++的cout输出
- 多视几何 003 二次曲线
- 进制转换--(2-8)为什么2的3次方=8,所以三位变一位
- 福清龙华职业中专计算机应用学校什么,福建省福清龙华职业中专学校招生专业|福建省福清龙华职业中专学校有哪些专业...
- val( )函数的用法
热门文章
- 编程学将成为必然趋势,青少年编程,从哪里开始?这里推荐Python
- Django基础一之web框架的本质
- Pandas的学习(5.pandas中处理丢失数据和空值数据以及填充空值数据)
- opengl加载显示3D模型lxo类型文件
- wxHtml 示例:帮助浏览器
- GDCM:gdcm::CodeString的测试程序
- GDCM:DICOM文件转储到Siemens Base64
- Boost:boost::bimaps::vector_of的测试程序
- VTK:图表之DirectedGraphToMutableDirectedGraph
- OpenCV级联识别器cascade recognizer的实例(附完整代码)