Pandas札记2_pandas基础
2019-07-24 本文已影响6人
皮皮大
写于本篇札记结束之后:今天晚上在图书馆写这篇札记的时候,心情很乱,很浮躁,因为工作的原因。最近真的很迷茫!希望快点结束这种状态!
Pandas的主要特点
Pandas
是一个高性能的数据操作和分析工具
- 快速高效的
DataFrame
对象,具有默认和自定义的索引。 - 将数据从不同文件格式加载到内存中的数据对象的工具。
- 丢失数据的数据对齐和综合处理。
- 重组和摆动日期集。
- 基于标签的切片,索引和大数据集的子集。
- 可以删除或插入来自数据结构的列。
- 按数据分组进行聚合和转换。
- 高性能合并和数据加入。
- 时间序列功能。
- pandas中的三大数据结构:
Index
、DataFrame
和Series
导入pandas
import pandas as pd
from pandas import Series, DataFrame # 导入两个重要的数据结构
Series简介
Series
主要是针对一维
的数据,另外的DataFrame
是针对多维数据的
-
Series
是一个一维的数组对象,它包含一个值序列和一个对应的索引序列 -
Series
是显式定义索引和元素关联 - 索引不仅是数字,还可以是字符串
- 索引不需要连续,也可以重复
- 可以将
pandas
中的数据看做是类似于Python
中有序字典的形式 - 索引看做是键,数据看做是值
![](https://img.haomeiwen.com/i5142014/d88cea32f354a65e.png)
![](https://img.haomeiwen.com/i5142014/64c862ad7e83a42d.png)
s = pd.Series([7, -3, -1, 9])
s
# 结果
0 7
1 -3
2 -1
3 9
dtype: int64
s.dtype # 类型
s.values # 查看值
s.index # 查看索引
# 创建时候直接指定索引
s1 = pd.Series([7, -3, -4, 9, 5], index=["a", "b", "c", "d", "e"])
# 通过列表指定索引
s2 = pd.Series([7, -3, -4, 9, 5], index=list("abcde"))
s3 = pd.Series([7, -3, -4, 9, 5], index=list("12345"))
![](https://img.haomeiwen.com/i5142014/d70f6aee36a604b1.png)
![](https://img.haomeiwen.com/i5142014/d3ecc2afa45a0c92.png)
![](https://img.haomeiwen.com/i5142014/3ca0e50c92fb8d64.png)
# Series中也有类似字典中的items()、keys()、values()
>>s4.items()
<zip at 0x2428d151348>
>>list(s4.items())
[('1', 'shenzhen'), ('2', 'zhuhai'), ('3', 'guangzhou'), ('4', 'suzhou')]
>>list(s4.keys())
['1', '2', '3', '4']
>>s4[:]
1 shenzhen
2 zhuhai
3 guangzhou
4 suzhou
dtype: object
number = ["1", "2", "3", "5"]
s5 = pd.Series(dic, number) # 结果中以指定的索引为准,如果原来的索引不存在指定结果为None
s5
# 结果
1 shenzhen
2 zhuhai
3 guangzhou
5 NaN
dtype: object
# pandas中通过isnull和notnull来检查元素的丢失情况
pd.isnull(s5)
# 结果
1 False
2 False
3 False
5 True
dtype: bool
![](https://img.haomeiwen.com/i5142014/8eb0028942b13d5e.png)
DataFrame
DataFrame
是Pandas
的二维数据结构,表示的是矩阵数据。
- 类似于关系型数据库的结构,每列是不同的值类型,比如:
数值、字符串、布尔值
-
DataFrame
同时有行和列索引,看做是共享索引的Series
的字典 - 创建方法:利用包含等长度列表或者
Numpy
数组的字典来生成。
![](https://img.haomeiwen.com/i5142014/0797f707d611e190.png)
data = {
'state':['beijing','beijing','beijing','shanghai','shanghai','shanghai'],
'year':[2000,2001,2002,2001,2002,2003],
'pop':[1.5, 1.7,3.6,2.4,2.9,3.2]
}
f = pd.DataFrame(data)
f
结果:
![](https://img.haomeiwen.com/i5142014/2e09f3247f46880f.png)
f.head() # 查看前5行;默认是5行
f.head(3) # 查看前3行
f.tail() # 查看后5行数据
![](https://img.haomeiwen.com/i5142014/1f5472b52d76a898.png)
pd.DataFrame(data, columns=['year', 'state', 'pop']) # 通过columns参数指定列属性的顺序
![](https://img.haomeiwen.com/i5142014/04794b599f5ffd04.png)
f2 = pd.DataFrame(data, # 同时指定行索引和列索引
columns=['year', 'state', 'pop'],
index=['a', 'b', 'c', 'd', 'e', 'f'])
![](https://img.haomeiwen.com/i5142014/84a532beaa7a5f38.png)
f2['state'] # 查看某列的全部数据;一列的数据
f2.state # 通过属性的形式检索,少用
f2.loc['a'] # 检索某行的数据
f2['debt'] = 12 # 增加一列数据
![](https://img.haomeiwen.com/i5142014/521fff35c1193388.png)
data = {'state':['beijing','beijing','beijing','shanghai','shanghai','shanghai'],
'year':[2000,2001,2002,2001,2002,2003],
'pop':[1.5, 1.7,3.6,2.4,2.9,3.2]
}
df = pd.DataFrame(data, index=list('abcdef')) # 创建DF数据
df
![](https://img.haomeiwen.com/i5142014/d4eb8ba2bc458d4a.png)
df1 = df.loc['a'] # 通过loc属性取某行的值
df1
# 结果
state beijing
year 2000
pop 1.5
Name: a, dtype: object
>>f2['new'] = (f2['state'] == 'beijing') # 先判断state属性中值为beijing,返回的是True;其他False
>>f2
![](https://img.haomeiwen.com/i5142014/6bb930aa5b54252f.png)
# 删除某列;从DataFrame中选取的列是数据的视图,而不是拷贝;
# 对选取列的修改会反映到DataFrame上。如果需要复制,应当使用copy方法。
del f2['new']
f2.columns
结果:
Index(['year', 'state', 'pop', 'debt', 'age'], dtype='object')
# 转置功能T
f2.T
![](https://img.haomeiwen.com/i5142014/66445342a036f7ff.png)
f2.values # 访问value
f.info() # 查看DF的整体信息
f.drop(index=1)
# f.drop(index=[1,2]) 删除两行数据drop
# 删除某列的数据f.drop(columns=["state","year"])
f.drop(columns=["state"])
import pandas as pd
# 创建字典类型数据,传入DF方法中
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],
'pop': [1.5, 1.8, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
frame
![](https://img.haomeiwen.com/i5142014/03cf61fa6147dff4.png)
# 改变列属性的顺序
pd.DataFrame(data, columns=['year', 'pop', 'state'])
# 不存在的列属性debt用None表示
frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
index=['one', 'two', 'three', 'four', 'five', 'six'])
# 获取所有的列属性和某列的值,得到的是一个Series类型数据
# 返回的索引和DF数据相同
print(frame2.columns)
frame2['state'] # 适用于任何列名
# loc属性:单个或多个
print(frame2.loc["three"])
frame2.loc[["two", "three"]]
# del 用于删除某个列
# 先为DF数据增加一个布尔列:根据state是否为"Nevada"
frame2["eastern"] = (frame2["state"] == "Nevada")
frame2
# del frame2["eastern"]
![](https://img.haomeiwen.com/i5142014/c8e44e0faacd773e.png)
# 嵌套字典传给DF,外层字典的键作为列索引;内层字典的键作为行索引
pop = {'Nevada': {2001: 2.4, 2002: 2.9},
'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame3 = pd.DataFrame(pop)
print(frame3)
frame3.T # 转置功能
![](https://img.haomeiwen.com/i5142014/ce134ae36449054a.png)