赞
踩
目录
5.重新索引, 传入fill_value=n填充缺失值(DateFrame中)
扩展库pandas是基于扩展库numpy和matplotlib的数据分析模块,是一个开源项目,提供了大量标准数据模型和高校操作大型数据集所需要的功能。可以说pandas是使得python能够称为高效且强大的数据分析行业首选语言的重要因素之一。
扩展库pandas常用的数据结构有:
Series是pandas提供的一维数组,由索引和值两部分组成,是一个类似于字典的结构。其中值的类型可以不同,如果在创建时没有明确指定索引则会自动使用从0开始的非零整数作为索引。
格式:
- >>> import pandas as pd
- >>> obj=pd.Series([1,-2,3,-4]) #仅有一个数组构成
- >>> obj
- 0 1
- 1 -2
- 2 3
- 3 -4
- dtype: int64
尽管创建Series指定了index参数,实际pandas还是有隐藏的index位置信息的。所以Series有两套描述某条数据的手段:位置和标签。
- >>> i=["a","c","d","a"]
- >>> v=[2,4,5,7]
- >>> t=pd.Series(v,index=i,name="col")
- >>> print(t)
- a 2
- c 4
- d 5
- a 7
- Name: col, dtype: int64
- >>> t
- a 2
- c 4
- d 5
- a 7
- Name: col, dtype: int64
- >>> val=[2,3,5,6]
- >>> idex1=range(10,14)
- >>> idex2="hello the cruel world".split()
- >>> s0=pd.Series(val)
- >>> s0 #显示了index位置信息
- 0 2
- 1 3
- 2 5
- 3 6
- dtype: int64
- >>> s0.index
- RangeIndex(start=0, stop=4, step=1)
- >>> s0[0]
- 2
- >>> s1=pd.Series(val,index=idex1)
- >>> s1
- 10 2
- 11 3
- 12 5
- 13 6
- dtype: int64
- >>> print(s1.index)
- RangeIndex(start=10, stop=14, step=1)
- >>> t=pd.Series(val,index=idex2)
- >>> t #隐藏了index位置信息
- hello 2
- the 3
- cruel 5
- world 6
- dtype: int64
- >>> print(t.index)
- Index(['hello', 'the', 'cruel', 'world'], dtype='object')
- >>> print(s1[10])
- 2
- >>> print('default:',t[0],'label:',t['hello'])
- default: 2 label: 2
- >>> sdata={'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
- >>> obj3=pd.Series(sdata) #字典的键直接成为索引
- >>> obj3
- Ohio 35000
- Texas 71000
- Oregon 16000
- Utah 5000
- dtype: int64
- >>> sdata={"a":100,"b":200,"e":300}
- >>> letter=["a","c","e"]
- >>> obj=pd.Series(sdata,index=letter)
- >>> type(obj)
- <class 'pandas.core.series.Series'>
- >>> print(obj) #以index为准,不匹配的值为NAN
- a 100.0
- c NaN
- e 300.0
- dtype: float64
- >>> sdata={'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
- >>> obj1=pd.Series(sdata)
- >>> obj1
- Ohio 35000
- Texas 71000
- Oregon 16000
- Utah 5000
- dtype: int64
- >>> states=['Calofornia','Ohio','Oregon','Texas']
- >>> obj2=pd.Series(sdata,index=states)
- >>> obj2
- Calofornia NaN
- Ohio 35000.0
- Oregon 16000.0
- Texas 71000.0
- dtype: float64
- >>> obj1+obj2 #按相同索引自动加,只一个索引值为NAN
- Calofornia NaN
- Ohio 70000.0
- Oregon 32000.0
- Texas 142000.0
- Utah NaN
- dtype: float64
- >>> obj=pd.Series([4,7,-3,2])
- >>> obj
- 0 4
- 1 7
- 2 -3
- 3 2
- dtype: int64
- >>> obj.index=['张三','李四','王五','赵六']
- >>> obj
- 张三 4
- 李四 7
- 王五 -3
- 赵六 2
- dtype: int64
时间序列对象一般使用pandas的date_range()函数生成,可以指定日期时间的起始和结束范围、时间间隔以及数据数量等参数,语法为:
其中参数start和end分别用来指定起止日期时间;参数periods用来指定要生成的数据数量;参数freq用来指定时间间隔,默认为'D',表示相邻两个日期之间相差一天,更多取值和含义见:
http://pandas.pydata.org/pandasdocs/stable/user_guide/timeseries.html#timeseries-offset-aliases
另外,pandas的Timestamp类也支持很多日期时间有关的操作。
- >>> import pandas as pd
- >>> print(pd.date_range(start='20190601',end='20190630',freq='5D')) #间隔五天
- DatetimeIndex(['2019-06-01', '2019-06-06', '2019-06-11', '2019-06-16',
- '2019-06-21', '2019-06-26'],
- dtype='datetime64[ns]', freq='5D')
- >>> print(pd.date_range(start='20190601',end='20190630',freq='W')) #间隔一周
- DatetimeIndex(['2019-06-02', '2019-06-09', '2019-06-16', '2019-06-23',
- '2019-06-30'],
- dtype='datetime64[ns]', freq='W-SUN')
- >>> print(pd.date_range(start='20190601',periods=5,freq='2D')) #间隔两天
- DatetimeIndex(['2019-06-01', '2019-06-03', '2019-06-05', '2019-06-07',
- '2019-06-09'],
- dtype='datetime64[ns]', freq='2D')
- >>> print(pd.date_range(start='20190601',periods=8,freq='2H')) #2小时,8个数据
- DatetimeIndex(['2019-06-01 00:00:00', '2019-06-01 02:00:00',
- '2019-06-01 04:00:00', '2019-06-01 06:00:00',
- '2019-06-01 08:00:00', '2019-06-01 10:00:00',
- '2019-06-01 12:00:00', '2019-06-01 14:00:00'],
- dtype='datetime64[ns]', freq='2H')
- >>> print(pd.date_range(start='201906010300',periods=12,freq='T')) #间隔一分钟
- DatetimeIndex(['2019-06-01 03:00:00', '2019-06-01 03:01:00',
- '2019-06-01 03:02:00', '2019-06-01 03:03:00',
- '2019-06-01 03:04:00', '2019-06-01 03:05:00',
- '2019-06-01 03:06:00', '2019-06-01 03:07:00',
- '2019-06-01 03:08:00', '2019-06-01 03:09:00',
- '2019-06-01 03:10:00', '2019-06-01 03:11:00'],
- dtype='datetime64[ns]', freq='T')
- >>> pd.date_range(start='20190101',end='20191231',freq='M') #一月,月末最后一天
- DatetimeIndex(['2019-01-31', '2019-02-28', '2019-03-31', '2019-04-30',
- '2019-05-31', '2019-06-30', '2019-07-31', '2019-08-31',
- '2019-09-30', '2019-10-31', '2019-11-30', '2019-12-31'],
- dtype='datetime64[ns]', freq='M')
- >>> pd.date_range(start='20190101',periods=6,freq='A') #间隔一年,年末最后一天
- DatetimeIndex(['2019-12-31', '2020-12-31', '2021-12-31', '2022-12-31',
- '2023-12-31', '2024-12-31'],
- dtype='datetime64[ns]', freq='A-DEC')
- >>> pd.date_range(start='20190101',periods=6,freq='AS') #间隔一年,年初第一天
- DatetimeIndex(['2019-01-01', '2020-01-01', '2021-01-01', '2022-01-01',
- '2023-01-01', '2024-01-01'],
- dtype='datetime64[ns]', freq='AS-JAN')
- >>>data=pd.Series(index=pd.date_range(start='20190701',periods=24,freq='H'),data=range(24))
- >>> print(data[:5]) #前5条数据
- 2019-07-01 00:00:00 0
- 2019-07-01 01:00:00 1
- 2019-07-01 02:00:00 2
- 2019-07-01 03:00:00 3
- 2019-07-01 04:00:00 4
- Freq: H, dtype: int64
- >>> print(data.resample('3H').mean()) #3分钟重采样,计算均值
- 2019-07-01 00:00:00 1.0
- 2019-07-01 03:00:00 4.0
- 2019-07-01 06:00:00 7.0
- 2019-07-01 09:00:00 10.0
- 2019-07-01 12:00:00 13.0
- 2019-07-01 15:00:00 16.0
- 2019-07-01 18:00:00 19.0
- 2019-07-01 21:00:00 22
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。