大家好本人小白,整理资料供学习和参考,大部分来自Pandas官方文档https://pandas.pydata.org/
pandas是建立在NumPy上的一个Python包,一款强大的开源数据分析工具。虽然NumPy能很好的处理某个数据,但是对于表、库之类的数据模型就需要pandas了。它非常适合处理以下数据。
1、表格数据(tabular),如SQLtabel or excel等column是不同类型的(heterogeneously-typed columns)
2、具有行列标签的矩阵数据
3、任何其他形式的观察/统计数据集。数据完全不需要标记就可以放入pandas数据结构中
pandas的安装 同样的也是用pip进行安装
pip install pandas
项目中的导包也是一样的,通常改名为pd
import pandas as pd
pandas有两个主要自带的数据结构分别是series(一维)和DataFrame(二维)
dimensions(维度) | Name | Description |
---|---|---|
1 | Series | 一维的同类型数组 |
2 | DataFrame | 一般为二维的、可以是不同列类型的数组 |
Series
是一个一维标记数组,能够保存任何数据类型(整数,字符串,浮点数,Python对象等)
1、可以通过列表list来传值创建一个series对象,这个对象的index是按默认从0开始排序的
>>>s = pd.Series([1, 3, "牛马哥", 7, 6, 8]) #Creating a Series by passing a list of values
>>>print(s)
0 1
1 3
2 牛马哥 #可以从中发现series可以存储不同的数据类型
3 7
4 6
5 8
dtype: object #可以看出每一个数据都有自己的index,如“牛马哥”这个数据的index是2
2、可以在series构造函数中添加index的值
>>>s = pd.Series(["牛马哥", "是", "一个","菜鸡", 6, 6],index=np.arange(1,7))
>>>print(s)
1 牛马哥 #可以看出index从1开始排列
2 是
3 一个
4 菜鸡
5 6
6 6
dtype: object
3、标量值生成Series
>>> d = pd.Series(5., index=['a', 'b', 'c', 'd', 'e'])
>>> print(d)
a 5.0
b 5.0
c 5.0
d 5.0
e 5.0
dtype: float64
4、可以用python中的字典创建series
>>>s = {'第一个index':100,'第二个index':150,'第三个index':130}
>>>s_series = pd.Series(s)
>>>print(s_series)
第一个index 100
第二个index 150
第三个index 130
dtype: int64 # 会发现字典的key值会变成每条数据的index
注意:data 为字典,且未设置 index 参数时,如果 Python 版本 >= 3.6 且 Pandas 版本 >= 0.23,Series 按字典的插入顺序排序索引。Python < 3.6 或 Pandas < 0.23,且未设置 index 参数时,Series 按字母顺序排序字典的键(key)列表。上例中,如果 Python < 3.6 或 Pandas < 0.23,Series 按字母排序字典的键。输出结果不是 [‘b’, ‘a’, ‘c’],而是 [‘a’, ‘b’, ‘c’]
5、Series 操作与 ndarray 类似,支持大多数 NumPy 函数,还支持索引切片。
DataFrame不单单可以用,如index = []来设置index之外,还可以用columns = []来设置列标签
1、通过传递日期时间索引(DatetimeIndex,先使用后面会讲解)和Numpy数组来创建DataFrame
>>>dates = pd.date_range("20130101", periods=6) #pandas另外的数据结构 DatetimeIndex,主要是时间索引
>>>df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list("ABCD"))
>>>print(df)
A B C D #DatetimeIndex中periods就是时间的间隔
2013-01-01 -0.362514 0.920888 0.742842 -0.899137
2013-01-02 -0.018456 0.001944 1.579725 -1.144949
2013-01-03 1.457461 -0.054614 0.298978 -1.168914
2013-01-04 -1.341478 -0.440118 1.477190 -0.387820
2013-01-05 -1.266237 1.145619 0.539587 0.063641
2013-01-06 1.832329 1.831395 0.045710 0.802781
2、DataFrame和series相同也可以通过dictionary来传值来创建对象,只不过字典的key值是来当作列标签
>>>df2 = pd.DataFrame(
... {
... "A": 1.0,
... "B": pd.Timestamp("20130102"),
... "C": pd.Series(1, index=list(range(4)), dtype="float32"),
... "D": np.array([3] * 4, dtype="int32"),
... "E": pd.Categorical(["test", "train", "test", "train"]),
... "F": "foo",
... }
...)
>>> print(df2)
A B C D E F
0 1.0 2013-01-02 1.0 3 test foo
1 1.0 2013-01-02 1.0 3 train foo
2 1.0 2013-01-02 1.0 3 test foo
3 1.0 2013-01-02 1.0 3 train foo
3、用列表字典生成 DataFrame
>>> data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
>>> res = pd.DataFrame(data)
>>> print(res)
a b c
0 1 2 NaN
1 5 10 20.0
如上图代码 {‘a’: 1, ‘b’: 2} 代表index = 0的数据,{‘a’: 5, ‘b’: 10, ‘c’: 20}代表index = 1的数据
4、用元组字典生成 DataFrame
>>>res = pd.DataFrame({('a', 'b'): {('A', 'B'): 1, ('A', 'C'): 2},
('a', 'a'): {('A', 'C'): 3, ('A', 'B'): 4},
('a', 'c'): {('A', 'B'): 5, ('A', 'C'): 6},
('b', 'a'): {('A', 'C'): 7, ('A', 'B'): 8},
('b', 'b'): {('A', 'D'): 9, ('A', 'B'): 10}})
>>>print(res)
a b
b a c a b #元组字典可以自动创建多层索引 DataFrame。
A B 1.0 4.0 5.0 8.0 10.0
C 2.0 3.0 6.0 7.0 NaN
D NaN NaN NaN NaN 9.0
当然pandas也是可以多维度的,可以用轴0、轴1、轴2来表示,但是在表格数据(二维)中行和列明显比轴更好理解,更有阅读性。
我特别喜欢pandas的原因之一还有它强大的IO工具,能读写平面文件(such as CSV),对数据库、excel非常方便。同时能轻松处理各类型数据。