活动地址:优快云21天学习挑战赛
数据分析---pandas
Pandas基本介绍
Python Data Analysis Library 或 Pandas是基于Numpy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
Pandas安装和引用
利用pip下载
pip install pandas
引用
import pandas as pd
Pandas 基本数据结构
pandas有两种常用的基本结构:
Series
一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很接近。Series能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中。
DataFrame
二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。
Pandas库的series类型
一维Series可以用一维列表初始化:
s = pd.Series([1,6,5,6,8,np.nan])
np.nan代表为空值
print(s)
结果如下:
0 1.0
1 6.0
2 5.0
3 6.0
4 8.0
5 NaN
dtype: float64
默认情况下,Series的下标都是数字(可以使用额外参数指定),类型是统一的。
索引(数据的行标签)
print(s.index )
# 从0到6(不含),1为步长
结果如下:
RangeIndex(start=0, stop=6, step=1)
值
print(s.values)
结果如下:
array([ 1.,6.,5.,6.,8.,np.nan])
切片操作
print(s[2:5])
#左闭右开
结果如下:
2 5.0
3 6.0
4 8.0
dtype: float64
print(s[::2])
结果如下:
0 1.0
2 5.0
4 8.0
dtype: float64
索引赋值
s.index.name = '索引'
print(s)
结果如下:
索引
0 1.0
1 6.0
2 5.0
3 6.0
4 8.0
5 NaN
dtype: float64
s.index = list('abcdef')
print(s)
结果如下:
a 1.0
b 6.0
c 5.0
d 6.0
e 8.0
f NaN
dtype: float64
s['a':'c':2]
#依据自己定义的数据类型进行切片,不是左闭右开了
结果如下:
a 1.0
c 6.0
dtype: float64
Pandas库的DataFrame类型
DataFrame则是个二维结构,这里首先构造一组时间序列,作为我们第一维的下标:
date = pd.date_range("20220101", periods = 6)
print(date)
结果如下:
DatetimeIndex(['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04',
'2022-01-05', '2022-01-06'],
dtype='datetime64[ns]', freq='D')
接着我们创建一个DataFrame结构:
import pandas as pd
import numpy as np
date = pd.date_range("20220101", periods = 6)
df = pd.DataFrame(np.random.randn(6,4), index = date, columns = list("abcd"))
print(df)
结果如下:
a b c d
2022-01-01 -0.037068 0.552668 -1.296840 -1.599985
2022-01-02 1.123589 0.503648 -0.372351 1.572872
2022-01-03 0.991284 0.990300 -0.077618 1.085900
2022-01-04 -1.963700 1.105683 -0.589930 0.605076
2022-01-05 0.814758 -0.518774 0.333070 -1.589554
2022-01-06 -1.085519 -1.053977 2.225328 -1.508589
默认情况下,如果不指定index参数和columns,那么它们的值将从用0开始的数字替代。
查看数据
1、头尾数据
head和tail方法可以分别查看最前面几行和最后面几行的数据(默认为5):
df.head() # 查看最前面几行的数据
df.tail() # 查看最后面几行的数据
2、下标,列标,数据
- 下标使用index属性查看:
df.index
- 列标使用columns属性查看:
df.columns
- 数据值使用values查看:
df.values
pandas读取数据及数据操作
豆瓣电影数据文件获取:
链接:https://pan.baidu.com/s/1WNz2YYkOTVc89OfvmxeZZQ?pwd=xx11
提取码:xx11
快速通道
import pandas as pd
df = pd.read_excel(r"C:\Users\豆瓣电影数据.xlsx",index_col = 0)
# csv:read_csv;绝对路径或相对路径默认在当前文件夹下。
# r告诉编译器不需要转义
# 将文件路径改成自己电脑上的路径哦
行操作
print(df.iloc[0:4])
#左闭右开
结果如下:
名字 投票人数 类型 产地 上映时间 时长 年代 评分 首映地点
0 肖申克的救赎 692795.0 剧情/犯罪 美国 1994-09-10 00:00:00 142 1994 9.6 多伦多电影节
1 控方证人 42995.0 剧情/悬疑/犯罪 美国 1957-12-17 00:00:00 116 1957 9.5 美国
2 美丽人生 327855.0 剧情/喜剧/爱情 意大利 1997-12-20 00:00:00 116 1997 9.5 意大利
3 阿甘正传 580897.0 剧情/爱情 美国 1994-06-23 00:00:00 142 1994 9.4 洛杉矶首映
print(df.loc[0:4] )
#不是左闭右开
结果如下:
名字 投票人数 类型 产地 上映时间 时长 年代 评分 首映地点
0 肖申克的救赎 692795.0 剧情/犯罪 美国 1994-09-10 00:00:00 142 1994 9.6 多伦多电影节
1 控方证人 42995.0 剧情/悬疑/犯罪 美国 1957-12-17 00:00:00 116 1957 9.5 美国
2 美丽人生 327855.0 剧情/喜剧/爱情 意大利 1997-12-20 00:00:00 116 1997 9.5 意大利
3 阿甘正传 580897.0 剧情/爱情 美国 1994-06-23 00:00:00 142 1994 9.4 洛杉矶首映
4 霸王别姬 478523.0 剧情/爱情/同性 中国大陆 1993-01-01 00:00:00 171 1993 9.4 香港
# 添加一行
dit = {"名字":"流浪地球","投票人数":33346,"类型":"剧情/科幻","产地":"中国大陆","上映时间":"2020-10-01 00:00:00","时长":242,"年代":2020,"评分":np.nan,"首映地点":"中国大陆"}
s = pd.Series(dit)
s.name = 38738
df = df.append(s) #覆盖掉原来的数据重新进行赋值
print(df[-5:])
# 删除一行
df = df.drop([38738])
print(df[-5:])
列操作
print(df.columns)
结果如下:
Index(['名字', '投票人数', '类型', '产地', '上映时间', '时长', '年代', '评分', '首映地点'], dtype='object')
print(df["名字"][:5])
结果如下:
0 肖申克的救赎
1 控方证人
2 美丽人生
3 阿甘正传
4 霸王别姬
Name: 名字, dtype: object
# 增加一列
df["序号"] = range(1,len(df)+1)
print(df)
# 删除一列
df = df.drop("序号",axis = 1) #axis指定方向,0为行1为列,默认为0
print(df)
通过标签选择数据
df.loc[[index],[colunm]]通过标签选择数据
print(df.loc[1,"名字"])
结果如下:
'控方证人'
条件选择
缺失值及异常值处理
缺失值处理方法
方法 | 说明 |
---|---|
dropna | 根据标签中的缺失值进行过滤,删除缺失值 |
fillna | 对缺失值进行填充 |
isnull | 返回一个布尔值对象,判断哪些值是缺失值 |
notnull | isnull的否定式 |
- 判断缺失值
df[df["名字"].isnull()]
df[df["名字"].notnull()]
- 填充缺失值
df["评分"].fillna(np.mean(df["评分"]), inplace = True)
#使用均值来进行替代,inplace意为直接在原始数据中进行修改
- 删除缺失值
df.dropna() 参数
how = ‘all’:删除全为空值的行或列
inplace = True: 覆盖之前的数据
axis = 0: 选择行或列,默认是行
df.dropna(inplace = True)
- 处理异常值
异常值,即在数据集中存在不合理的值,又称离群点。比如投票人数为负数等,都属于异常值的范围。
df[df["投票人数"] < 0]
数据保存
数据处理之后,然后将数据重新保存到movie.xlsx
df.to_excel("movie.xlsx")
# 默认路径为现在文件夹所在的路径
下一篇点这里:
数据分析—pandas(二)
数据分析—pandas(三)