Pandas札记2_pandas基础

浏览: 915

写于本篇札记结束之后:今天晚上在图书馆写这篇札记的时候,心情很乱,很浮躁,因为工作的原因。最近真的很迷茫!希望快点结束这种状态!

Pandas的主要特点

Pandas是一个高性能的数据操作和分析工具

  • 快速高效的DataFrame对象,具有默认和自定义的索引。
  • 将数据从不同文件格式加载到内存中的数据对象的工具。
  • 丢失数据的数据对齐和综合处理。
  • 重组和摆动日期集。
  • 基于标签的切片,索引和大数据集的子集。
  • 可以删除或插入来自数据结构的列。
  • 按数据分组进行聚合和转换。
  • 高性能合并和数据加入。
  • 时间序列功能。
  • pandas中的三大数据结构:IndexDataFrameSeries

导入pandas

import pandas as pd
from pandas import Series, DataFrame # 导入两个重要的数据结构

Series简介

Series主要是针对一维的数据,另外的DataFrame是针对多维数据的

  • Series是一个一维的数组对象,它包含一个值序列和一个对应的索引序列
  • Series是显式定义索引和元素关联
  • 索引不仅是数字,还可以是字符串
  • 索引不需要连续,也可以重复
  • 可以将pandas中的数据看做是类似于Python中有序字典的形式
  • 索引看做是键,数据看做是值

image.png

image.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"))

image.png

image.png

image.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

image.png


DataFrame

DataFramePandas的二维数据结构,表示的是矩阵数据。

  • 类似于关系型数据库的结构,每列是不同的值类型,比如:数值、字符串、布尔值
  • DataFrame同时有行和列索引,看做是共享索引的Series的字典
  • 创建方法:利用包含等长度列表或者Numpy数组的字典来生成。

image.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

结果:

image.png

f.head()  # 查看前5行;默认是5行
f.head(3) # 查看前3行
f.tail() # 查看后5行数据

image.png

pd.DataFrame(data, columns=['year', 'state', 'pop'])  # 通过columns参数指定列属性的顺序

image.png

f2 = pd.DataFrame(data,  # 同时指定行索引和列索引
columns=['year', 'state', 'pop'],
index=['a', 'b', 'c', 'd', 'e', 'f'])

image.png

f2['state']  # 查看某列的全部数据;一列的数据
f2.state # 通过属性的形式检索,少用
f2.loc['a'] # 检索某行的数据
f2['debt'] = 12 # 增加一列数据

image.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

image.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

image.png

# 删除某列;从DataFrame中选取的列是数据的视图,而不是拷贝;
# 对选取列的修改会反映到DataFrame上。如果需要复制,应当使用copy方法。
del f2['new']
f2.columns

结果:

Index(['year', 'state', 'pop', 'debt', 'age'], dtype='object')
# 转置功能T
f2.T

image.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

image.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"]

image.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 # 转置功能

image.png

推荐 0
本文由 皮大大 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册