python数据分析—基本数据结构
一、简介:
pandas是python的一个开源工具包,为Python提供了高性能,简单易用的的数据结构和数据分析工具。 pandas提供了类表格的统计操作和类SQL操作,方便数据的预处理工作,提供强大的缺失值处理功能。
pandas的特色功能:
- 索引对象:包括简单的索引和多次层索引。
- 引擎集成组合:用于汇总和转换数据集合。
- 日期范围生成器以及自定义日期偏移(实现自定义频率)。
- 输入工具和输出工具:从各种格式的文件中(csv、delimited、excel2003)加载表格数据,以及快速收高效的从PyTables/HDFS5格式中保存和加载Pandas对象。
- 标准数据结构的稀疏形式:可以用于存储大量缺失或者大量一致的数据。
- 移动窗口统计(滚动平均值、滚动标准偏差等)
二、数据结构:
2.1 .Series:
是pandas的重要数据结构,类似于一维数组与字典的集合,是一个有标签的一维数组,同时标签在Pandas中有对应的数据类型‘index’.
2.1.1 Series的创建:
Series在创建时可以接受很多种输入,比如:list、numpy的ndarray、dict甚至标量。Index可以有选择的传入。
- 传入list
import pandas as pd
list=[1,2,3,4,5,6]
obj=pd.Series(list)
print(obj)
0 1
1 2
2 3
3 4
4 5
5 6
dtype: int64
在定义Series时没有指定索引,因此pandas将自动创建0~n-1的序列作为索引。Series对象在输出时,每一行为Series的一个元素,左侧为索引,右侧为值。
- 传入字典
import pandas as pd
dict={
'a':1,'b':2,'c':3}
obj=pd.Series(dict)
print(obj)
a 1
b 2
c 3
dtype: int64
通过字典创建Series对象时,索引默认为字典的键值,也可以通过index参数指定。
import pandas as pd
dict={
'a':1,'b':2,'c':3}
obj=pd.Series(dict,index=['a','b','y'])
print(obj)
a 1.0
b 2.0
y NaN
dtype: float64
从上面可以看出,字典中与指定索引相匹配的值诶放到了正确的位置,而不能匹配的索引对应的值为标记为NAN,这个过程叫做数据对齐。NaN(not a number),在Python中表示缺失值。
- 传入ndarray
import pandas as pd
import numpy as np
list=['a','b','c','d','e','f']
obj=pd.Series(np.array(list))
print(obj)
0 a
1 b
2 c
3 d
4 e
5 f
dtype: object
2.1.2 Series访问
- Series像一个ndarray,可以使用类似于访问ndarray的方式对其进行访问。
import pandas as pd
import numpy as np
list=['a','b','c','d','e','f']
obj=pd.Series(np.array(list))
print(obj)
'c'
- Series像一个ndarray,可以用类似访问ndarray的方式进行访问。
- Series又像一个固定大小的dict,所以可以用iloc()函数和loc()函数对Series进行访问。Series可以理解为一个定长、有序的 ‘字典’ 结果。
loc()函数:loc()通过行标签索引行数据;结果是左闭右闭
import numpy as np
import pandas as pd
list = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
obj = pd.Series(list, index=['a', 'b']) #设置行标签为['a','b']
#print(obj)
print(obj.loc['a':'b']) # 按照行索引索引数据
a [1, 2, 3, 4, 5]
b [6, 7, 8, 9, 10]
dtype: object
iloc()函数:iloc()函数通过行号进行索引数据;结果是左闭右开。iloc也可以取指定行列,只不过得按切片形式索引,不能直接拿标签索引来做。
import numpy as np
import pandas as pd
list = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
obj = pd.Series(list, index=['a', 'b'])
#print(obj)
print(obj.iloc[0:1]) #iloc()按照行号进行
a [1, 2, 3, 4, 5] #结果只有'a',可以看出iloc()结果是左闭右开
dtype: object
- 可以直接通过类似数组和类似属性的方式对其进行访问。
import numpy as np
import pandas as pd
list = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
obj = pd.Series(list, index=['a', 'b']) # 设置行标签为['a','b']
# print(obj)
#print(obj.loc['a':'b']) # 按照行索引索引数据
obj['c'] = [1, 2, 3, 4, 5]
print(obj)
print(obj.b)
a [1, 2, 3, 4, 5]
b [6, 7, 8, 9, 10]
c [1, 2, 3, 4, 5]
dtype: object
[6, 7, 8, 9, 10]
2.1.3 Series的操作
- 像数组一样对Series进行遍历的操作是没有必要的。
- Numpy对ndarray的操作对Series同样也可以,但由于索引的原因,操作时要注意数组对齐的问题。
2.1.4 Series的name属性
Series对像的索引与值可以通过属性index和values属性获取。
import numpy as np
import pandas as pd
list = [[1, 2, 3, 4