pandas的数据结构分析
- 分为series和DataFrame,其中series是一维的数据结构,DataFrame是二维的表格型的数据结构
series
- series是一个一维数组的对象,他能保存任何类型的数据,主要是由一组数据和与之相关的索引两部分组成
- 在Pandas中series对象可以通过pd.Series(data=None,index=None,dtapy=None,name=None,copy=False,fastpath=Falsa)创建
header 1 | header 2 |
---|
data | 传入的数据,可以是ndarray list |
index | 索引,必须是唯一的,且与数据的长度相同,如果没有传入索引参数,则默认会创建一个从0~N的整数索引 |
dype | 数据的类型 |
copy | 是否复制数据,默认为False |
# 传入一个列表创建一个Series对象
import pandas as pd
ser_obj = pd.Series([1,2,3,4,5])
ser_obj
OUT:
0 1
1 2
2 3
3 4
4 5
dtype: int64
# 通过index指定索引
ser_obj = pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])
ser_obj
OUT:
a 1
b 2
c 3
d 4
e 5
dtype: int64
# 通过dict创建Series对象
year_data = {2001:1.586,2002:3.898,2004:9.222}
ser_obj1=pd.Series(year_data)
ser_obj1
out:
2001 1.586
2002 3.898
2004 9.222
dtype: float64
ser_obj1*2
OUT:
2001 3.172
2002 7.796
2004 18.444
dtype: float64
DataFrame
DataFrame简介
- DataFrame是一个类似于二维数组或表格的对象,他每列的数据可以是不同的数据类型,与Series类似也是由索引和数据构成但是DataFrame不仅有行索引还有列索引
DataFrame创建
- pd.DataFrame(data=None,index=None,dtapy=None,columns=None,copy=False)
- index:行标签,如果没有传入索引参数,则默认会创建一个从0~N的整数索引
- columns:列标签,如果没有传入索引参数,则默认会创建一个从0~N的整数索引
df_obj = pd.DataFrame(demo_arr,columns=['NO1','NO2','NO3'])
df_obj
OUT:
NO1 NO2 NO3
0 a b c
1 d e f
element = df_obj['NO2']
element
OUT:
0 b
1 e
Name: NO2, dtype: object
df_obj.NO2
0 b
1 e
Name: NO2, dtype: object
df_obj['NO4'] = ['d','g']
df_obj
OUT:
NO1 NO2 NO3 NO4
0 a b c d
1 d e f g
del df_obj['NO2']
df_obj
OUT:
NO3 NO4
0 c d
1 f g
Pandas索引操作及高级索引
索引对象
- pandas中的索引都是index对象,又称为索引对象,该对象是不可以被修改的,以保障数据的安全
ser_obj = pd.Series(range(5),index=['a','b','c','d','e'])
ser_index = ser_obj.index
ser_index
OUT:
Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
ser_index['2']='cc'
TypeError: Index does not support mutable operations
- 创建两个公用一个index对象的Series类对象
ser_obj1 = pd.Series(range(3),index=['a','b','c'])
ser_obj2 = pd.Series(['a','b','c'],index=ser_obj1.index)
ser_obj2.index is ser_obj1.index
OUT:
TRUE
int64index:针对整数的特殊index对象
multiindex:层次化索引,表示单个轴上的多层索引
datetimeindex:存储纳秒级寄时间戳
重置索引
- panads中提供了一个重要的方法是reindex(),该方法的作用是对原索引和新索引进行匹配,也就是说新索引含有就索引的数据,而原索引会按照新索引的排序方法进行排序,如果新索引中没有原索引数据,那么程序不仅不会报错,而且会添加新的索引,并将值填充为NaN或者使用fill_vlues填充其他值。
- DataFrame.reindex(labels=None,index=None,columns=None,axis=None,method=None,copy=True,level=None,fill_value=nan,limit=None,tolerance=None)
- index:用作索引的新序列
- method:插值填充方式
- fill_value:引入缺失值时使用的替代值
- limit:向前或者后向填充时的最大填充量
ser_obj = pd.Series([1,2,3,4,5],index=['c','d','a','b','e'])
ser_obj
OUT:
c 1
d 2
a 3
b 4
e 5
dtype: int64
#重新索引
ser_obj2 = ser_obj.reindex(['a','b','c','d','e','f','g'])
ser_obj2
OUT:
a 3.0
b 4.0
c 1.0
d 2.0
e 5.0
f NaN
g NaN
dtype: float64
#使用fill_value选择填充相同值
ser_obj2 = ser_obj.reindex(['a','b','c','d','e','f','g'],fill_value=6)
ser_obj2
OUT:
a 3
b 4
c 1
d 2
e 5
f 6
g 6
dtype: int64
#使用method选择填充方式
ser_obj4.reindex(range(6),method='ffill')#向前填充
OUT:
0 1
1 1
2 3
3 3
4 5
5 5
dtype: int64
ser_obj4.reindex(range(6),method='bfill')#向后填充
OUT:
0 1
1 3
2 3
3 5
4 5
5 7
dtype: int64
ser_obj4.reindex(range(6),method='nearest')#从最近的索引值进行填充
OUT:
0 1
1 3
2 3
3 5
4 5
5 7
dtype: int64