pandas入门
Posted 临风而眠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas入门相关的知识,希望对你有一定的参考价值。
Pandas入门(1)
其实七月份参加DataWhale组队学习的时候已经学了Pandas,但现在…看来还得重新学一遍
文章目录
一.基本介绍
Python Data Analysis Library或pandas 是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模驻
提
供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
import pandas as pd
import numpy as np
Pandas基本数据结构
pandas 中有两种常用的基本结构:
-
Series
一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近
Series能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中
-
DataFrame
二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器
以下的内容主要以DataFrame为主。
二.series类型
一维的Series可以用一维列表初始化:
#np.nan代表空值
s=pd.Series([1,3,5,np.nan,6,9])
print(s)
运行结果
:
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 9.0
dtype: float64
Series下标默认是数字(可以用额外参数来指定)
s2=pd.Series([1,9,231,415],index=['a','b','c','d'])
s2
运行结果
:
a 1
b 9
c 231
d 415
dtype: int64
索引:数据的行标签
可用
.index
来查看
print(s.index)
print(s2.index)
运行结果
:
RangeIndex(start=0, stop=6, step=1)
Index(['a', 'b', 'c', 'd'], dtype='object')
RangeIndex(start=0, stop=6, step=1)
表示从0开始,到6结束,但是不包括6
值
可用
.values
来查看所有值
s.values
运行结果
:
array([ 1., 3., 5., nan, 6., 9.])
s2.values
运行结果
:
array([ 1, 9, 231, 415], dtype=int64)
切片操作
s[2:4] #左闭右开
运行结果
:
2 5.0
3 NaN
dtype: float64
s[::2]
运行结果
:
0 1.0
2 5.0
4 6.0
dtype: float64
利用索引查看
s[0]
运行结果
:
1.0
索引赋值
s.index.name='索引'
s
运行结果
:
索引
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 9.0
dtype: float64
字母作索引
s.index=list('abcdef')
s
#和前面pd.Series然后给上index参数的效果一样
运行结果
:
a 1.0
b 3.0
c 5.0
d NaN
e 6.0
f 9.0
dtype: float64
此时用字符串的切片操作略有改变
s['a':'c']#用字符串是闭区间!
运行结果
:
a 1.0
b 3.0
c 5.0
dtype: float64
三.DataFrame类型
1.构造DataFrame
DataFrame是一个二维结构
先构造一个时间序列,作为第一维的下标
date=pd.date_range('20210810',periods=6)
print(date)
运行结果
:
DatetimeIndex(['2021-08-10', '2021-08-11', '2021-08-12', '2021-08-13',
'2021-08-14', '2021-08-15'],
dtype='datetime64[ns]', freq='D')
再创建DataFrame结构
df=pd.DataFrame(np.random.randn(6,4))
#六行四列
df
#默认索引从0开始
运行结果
:
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1.206358 | -0.158796 | -1.228562 | 0.271269 |
1 | -0.085720 | 0.351587 | -2.110459 | -2.524743 |
2 | -0.630313 | -0.311141 | 0.188865 | 0.998410 |
3 | 0.058486 | 1.146728 | -2.884707 | -0.060104 |
4 | -1.759204 | -1.288462 | -1.339736 | 0.492645 |
5 | 0.552470 | -1.801106 | 0.149472 | -1.223125 |
修改行索引index
df2=pd.DataFrame(np.random.randn(6,4),index=date)
df2
运行结果
:
0 | 1 | 2 | 3 | |
---|---|---|---|---|
2021-08-10 | -0.751919 | 0.473604 | -1.738984 | -0.362240 |
2021-08-11 | 0.973062 | -0.526056 | 0.421333 | 0.422171 |
2021-08-12 | 0.585130 | -0.161462 | -0.303330 | 0.076805 |
2021-08-13 | -0.175819 | 0.228104 | -0.008644 | 0.848540 |
2021-08-14 | -1.478600 | -0.015543 | -0.094961 | 0.053557 |
2021-08-15 | -0.510944 | -2.177933 | 1.107962 | -0.847353 |
修改列索引columns
df3=pd.DataFrame(np.random.randn(6,4),index=date,columns=list("ABCD"))
df3
运行结果
:
A | B | C | D | |
---|---|---|---|---|
2021-08-10 | 0.262801 | 0.805143 | 0.228210 | 1.675223 |
2021-08-11 | 1.748249 | 1.378762 | 0.426678 | -1.576107 |
2021-08-12 | -0.485013 | 0.587913 | 0.201231 | 1.135080 |
2021-08-13 | 0.700190 | 1.266896 | -0.895503 | -1.272253 |
2021-08-14 | 1.345920 | 0.886804 | -0.050278 | -0.639287 |
2021-08-15 | -1.496459 | -0.374866 | 0.647694 | -0.550200 |
默认情况下,若不指定index参数和colunmns,则值为从0开始的数字
除了传入二维数组,还可以用字典来传入数据
字典的每个key代表一列,其value可以是各种能转化为Series的对象
与Series要求所有的类型都一致不同,DataFrame只要求每一列数据的格式相同
#pd.Timestamp时间戳
df4 = pd.DataFrame({'A':1.,'B':pd.Timestamp('20210811'),'C':pd.Series(1,index=list(range(4)),dtype=float),'D':np.array([3]*4,dtype=int),'E':pd.Categorical(['test','train','test','train']),'F':'abc'})
df4
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
0 | 1.0 | 2021-08-11 | 1.0 | 3 | test | abc |
1 | 1.0 | 2021-08-11 | 1.0 | 3 | train | abc |
2 | 1.0 | 2021-08-11 | 1.0 | 3 | test | abc |
3 | 1.0 | 2021-08-11 | 1.0 | 3 | train | abc |
2.查看数据
头尾数据
head和tail方法可以分别查看最前面和最后面几行的数据(默认为5)
df.head(3)
运行结果
:
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1.206358 | -0.158796 | -1.228562 | 0.271269 |
1 | -0.085720 | 0.351587 | -2.110459 | -2.524743 |
2 | -0.630313 | -0.311141 | 0.188865 | 0.998410 |
df.tail(3)
运行结果
:
0 | 1 | 2 | 3 | |
---|---|---|---|---|
3 | 0.058486 | 1.146728 | -2.884707 | -0.060104 |
4 | -1.759204 | -1.288462 | -1.339736 | 0.492645 |
5 | 0.552470 | -1.801106 | 0.149472 | -1.223125 |
查看每一列的数据类型
df4.dtypes
运行结果
:
A float64
B datetime64[ns]
C float64
D int32
E category
F object
dtype: object
下标,列标,数据
下标:index属性查看
df.index
运行结果
:
RangeIndex(start=0, stop=6, step=1)
df3.index
运行结果
:
DatetimeIndex(['2021-08-10', '2021-08-11', '2021-08-12', '2021-08-13',
'2021-08-14', '2021-08-15'],
dtype='datetime64[ns]', freq='D')
列标:columns属性查看
df3.columns
运行结果
:
Index(['A', 'B', 'C', 'D'], dtype='object')
数据值:values查看
df.values
运行结果
:
array([[ 1.20635835, -0.15879606, -1.22856172, 0.27126942],
[-0.08571984, 0.35158676, -2.11045931, -2.52474321],
[-0.63031323, -0.31114102, 0.18886525, 0.99841011],
[ 0.05848585, 1.14672784, -2.88470694, -0.06010371],
[-1.75920402, -1.28846224, -1.33973556, 0.49264496],
[ 0.55247033, -1.80110647, 0.1494715 , -1.2231253 ]])
四.pandas读取数据及数据操作
下面会以豆瓣电影数据为例贯穿学习过程,想要资源的小伙伴可以私信我😄
#路径一样,在同一文件夹下面,所以可以省略具体路径
Df=pd.read_excel('豆瓣电影数据.xlsx')
如果不在同一文件夹,用绝对路径呢?
要注意的就是,直接用反斜杠
\\
会报错,因为很多时候\\
表示转义字符,这时候在路径前面加一个r防止转义就可以了
Df2 = pd.read_excel(r"C:\\Users\\86171\\Desktop\\数模\\豆瓣电影数据2.xlsx")
Df.head()
Unnamed: 0 | 名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 肖申克的救赎 | 692795.0 | 剧情/犯罪 | 美国 | 1994-09-10 00:00:00 | 142 | 1994 | 9.6 | 多伦多电影节 |
1 | 1 | 控方证人 | 42995.0 | 剧情/悬疑/犯罪 | 美国 | 1957-12-17 00:00:00 | 116 | 1957 | 9.5 | 美国 |
2 | 2 | 美丽人生 | 327855.0 | 剧情/喜剧/爱情 | 意大利 | 1997-12-20 00:00:00 | 116 | 1997 | 9.5 | 意大利 |
3 | 3 | 阿甘正传 | 580897.0 | 剧情/爱情 | 美国 | 1994-06-23 00:00:00 | 142 | 1994 | 9.4 | 洛杉矶首映 |
4 | 4 | 霸王别姬 | 478523.0 | 剧情/爱情/同性 | 中国大陆 | 1993-01-01 00:00:00 | 171 | 1993 | 9.4 | 香港 |
Df2.tail()
Unnamed: 0 | 名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|---|
38733 | 38733 | 神学院 S | 46.0 | Adult | 法国 | 1905-06-05 00:00:00 | 58 | 1983 | 8.6 | 美国 |
38734 | 38734 | 1935年 | 57.0 | 喜剧/歌舞 | 美国 | 1935-03-15 00:00:00 | 98 | 1935 | 7.6 | 美国 |
38735 | 38735 | 血溅画屏 | 95.0 | 剧情/悬疑/犯罪/武侠/古装 | 中国大陆 | 1905-06-08 00:00:00 | 91 | 1986 | 7.1 | 美国 |
38736 | 38736 | 魔窟中的幻想 | 51.0 | 惊悚/恐怖/儿童 | 中国大陆 | 1905-06-08 00:00:00 | 78 | 1986 | 8.0 | 美国 |
38737 | 38737 | 列宁格勒围困之星火战役 Блокада: Фильм 2: Ленинградский ме... | 32.0 | 剧情/战争 | 苏联 | 1905-05-30 00:00:00 | 97 | 1977 | 6.6 | 美国 |
1.行操作
#第一行
Df.iloc[0]
运行结果
:
Unnamed: 0 0
名字 肖申克的救赎
投票人数 692795
类型 剧情/犯罪
产地 美国
上映时间 1994-09-10 00:00:00
时长 142
年代 1994
评分 9.6
首映地点 多伦多电影节
Name: 0, dtype: object
#查看前五行
Df.iloc[0:5]
Unnamed: 0 | 名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 肖申克的救赎 | 692795.0 | 剧情/犯罪 | 美国 | 1994-09-10 00:00:00 | 142 | 1994 | 9.6 | 多伦多电影节 |
1 | 1 | 控方证人 | 42995.0 | 剧情/悬疑/犯罪 | 美国 | 1957-12-17 00:00:00 | 116 | 1957 | 9.5 | 美国 |
2 | 2 | 美丽人生 | 327855.0 | 剧情/喜剧/爱情 | 意大利 | 1997-12-20 00:00:00 | 116 | 1997 | 9.5 | 意大利 |
3 | 3 | 阿甘正传 | 580897.0 | 剧情/爱情 | 美国 | 1994-06-23 00:00:00 | 142 | 1994 | 9.4 | 洛杉矶首映 |
4 | 4 | 霸王别姬 | 478523.0 | 剧情/爱情/同性 | 中国大陆 | 1993-01-01 00:00:00 | 171 | 1993 | 9.4 | 香港 |
若用loc,则不是左闭右开
Df.loc[0:5]
Unnamed: 0 | 名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 肖申克的救赎 | 692795.0 | 剧情/犯罪 | 美国 | 1994-09-10 00:00:00 | 142 | 1994 | 9.6 | 多伦多电影节 |
1 | 1 | 控方证人 | 42995.0 | 剧情/悬疑/犯罪 | 美国 | 1957-12-17 00:00:00 | 116 | 1957 | 9.5 | 美国 |
2 | 2 | 美丽人生 | 327855.0 | 剧情/喜剧/爱情 | 意大利 | 1997-12-20 00:00:00 | 116 | 1997 | 9.5 | 意大利 |
3 | 3 | 阿甘正传 | 580897.0 | 剧情/爱情 | 美国 | 1994-06-23 00:00:00 | 142 | 1994 | 9.4 | 洛杉矶首映 |
4 | 4 | 霸王别姬 | 478523.0 | 剧情/爱情/同性 | 中国大陆 | 1993-01-01 00:00:00 | 171 | 1993 | 9.4 | 香港 |
5 | 5 | 泰坦尼克号 | 157074.0 | 剧情/爱情/灾难 | 美国 | 2012-04-10 00:00:00 | 194 | 2012 | 9.4 | 中国大陆 |
添加一行
可以先构造一个Series型数据,然后用append方法添加到DataFrame末尾
#添加复仇者联盟3
dit = {'名字': '复仇者联盟3:无限战争', '投票人数': 710371, '类型': '科幻', '产地': '美国','上映时间': '2018-05-11','时长':149,'年代':2018,'评分':8.1,'首映地点':'加州'}
s=pd.Series(dit)
#添加到最后一行
s.name=38738
s
运行结果
:
名字 复仇者联盟3:无限战争
投票人数 710371
类型 科幻
产地 美国
上映时间 2018-05-11
时长 149
年代 2018
评分 8.1
首映地点 加州
Name: 38738, dtype: object
要覆盖数据本身就要赋值!
Df=Df.append(s)
Df.tail()
Unnamed: 0 | 名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|---|
38734 | 38734.0 | 1935年 | 57.0 | 喜剧/歌舞 | 美国 | 1935-03-15 00:00:00 | 98 | 1935 | 7.6 | 美国 |
38735 | 38735.0 | 血溅画屏 | 95.0 | 剧情/悬疑/犯罪/武侠/古装 | 中国大陆 | 1905-06-08 00:00:00 | 91 | 1986 | 7.1 | 美国 |
38736 | 38736.0 | 魔窟中的幻想 | 51.0 | 惊悚/恐怖/儿童 | 中国大陆 | 1905-06-08 00:00:00 | 78 | 1986 | 8.0 | 美国 |
38737 | 38737.0 | 列宁格勒围困之星火战役 Блокада: Фильм 2: Ленинградский ме... | 32.0 | 剧情/战争 | 苏联 | 1905-05-30 00:00:00 | 97 | 1977 | 6.6 | 美国 |
38738 | NaN | 复仇者联盟3:无限战争 | 710371.0 | 科幻 | 美国 | 2018-05-11 | 149 | 2018 | 8.1 | 加州 |
删除一行
用drop方法
Df = Df.drop([38738])
Df.tail()
Unnamed: 0 | 名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|---|
38733 | 38733.0 | 神学院 S | 46.0 | Adult | 法国 | 1905-06-05 00:00:00 | 58 | 1983 | 8.6 | 美国 |
38734 | 38734.0 | 1935年 | 57.0 | 喜剧/歌舞 | 美国 | 1935-03-15 00:00:00 | 98 | 1935 | 7.6 | 美国 |
38735 | 38735.0 | 血溅画屏 | 95.0 | 剧情/悬疑/犯罪/武侠/古装 | 中国大陆 | 1905-06-08 00:00:00 | 91 | 1986 | 7.1 | 美国 |
38736 | 38736.0 | 魔窟中的幻想 | 51.0 | 惊悚/恐怖/儿童 | 中国大陆 | 1905-06-08 00:00:00 | 78 | 1986 | 8.0 | 美国 |
38737 | 38737.0 | 列宁格勒围困之星火战役 Блокада: Фильм 2: Ленинградский ме... | 32.0 | 剧情/战争 | 苏联 | 1905-05-30 00:00:00 | 97 | 1977 | 6.6 | 美国 |
2.列操作
看各个列的名称:
Df.columns
运行结果
:
Index(['Unnamed: 0', '名字', '投票人数', '类型', '产地', '上映时间', '时长', '年代', '评分',
'首映地点'],
dtype='object')
看具体一列的数据:Df[‘列名’]
Df['名字']
运行结果
:
0 肖申克的救赎
1 控方证人
2 美丽人生
3 阿甘正传
4 霸王别姬
...
38733 神学院 S
38734 1935年
38735 血溅画屏
38736 魔窟中的幻想
38737 列宁格勒围困之星火战役 Блокада: Фильм 2: Ленинградский ме...
Name: 名字, Length: 38738, dtype: object
指定要看的内容:再加一个中括号
Df['名字'][:5]
运行结果
:
0 肖申克的救赎
1 控方证人
2 美丽人生
3 阿甘正传
4 霸王别姬
Name: 名字, dtype: object
查看具体几列的内容,放入列表
Df[['名字','评分']][:5]
运行结果
:
名字 | 评分 | |
---|---|---|
0 | 肖申克的救赎 | 9.6 |
1 | 控方证人 | 9.5 |
2 | 美丽人生 | 9.5 |
3 | 阿甘正传 | 9.4 |
4 | 霸王别姬 | 9.4 |
增加一列
Df['序号']=range(1,len(Df)+1) #左闭右开
Df[:5]
Unnamed: 0 | 名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | 序号 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0.0 | 肖申克的救赎 | 692795.0 | 剧情/犯罪 | 美国 | 1994-09-10 00:00:00 | 142 | 1994 | 9.6 | 多伦多电影节 | 1 |
1 | 1.0 | 控方证人 | 42995.0 | 剧情/悬疑/犯罪 | 美国 | 1957-12-17 00:00:00 | 116 | 1957 | 9.5 | 美国 | 2 |
2 | 2.0 | 美丽人生 | 327855.0 | 剧情/喜剧/爱情 | 意大利 | 1997-12-20 00:00:00 | 116 | 1997 | 9.5 | 意大利 | 3 |
3 | 3.0 | 阿甘正传 | 580897.0 | 剧情/爱情 | 美国 | 1994-06-23 00:00:00 | 142 | 1994 | 9.4 | 洛杉矶首映 | 4 |
4 | 4.0 | 霸王别姬 | 478523.0 | 剧情/爱情/同性 | 中国大陆 | 1993-01-01 00:00:00 | 171 | 1993 | 9.4 | 香港 | 5 |
删除一列
Df = Df.drop(['序号'], axis = 1)
#默认是axis=0, 删除列是纵向axis=1
Df[:4]
Unnamed: 0 | 名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.0 | 肖申克的救赎 | 692795.0 | 剧情/犯罪 | 美国 | 1994-09-10 00:00:00 | 142 | 1994 | 9.6 | 多伦多电影节 |
1 | 1.0 | 控方证人 | 42995.0 | 剧情/悬疑/犯罪 | 美国 | 1957-12-17 00:00:00 | 116 | 1957 | 9.5 | 美国 |
2 | 2.0 | 美丽人生 | 327855.0 | 剧情/喜剧/爱情 | 意大利 | 1997-12-20 00:00:00 | 116 | 1997 | 9.5 | 意大利 |
3 | 3.0 | 阿甘正传 | 580897.0 | 剧情/爱情 | 美国 | 1994-06-23 00:00:00 | 142 | 1994 | 9.4 | 洛杉矶首映 |
通过标签进行数据选择
Df.loc[[index],[column]]
Df.loc[1,'名字']
运行结果
:
'控方证人'
Df.loc[[1,3,5,7,9],['名字','评分']]
名字 | 评分 | |
---|---|---|
1 | 控方证人 | 9.5 |
3 | 阿甘正传 | 9.4 |
5 | 泰坦尼克号 | 9.4 |
7 | 新世纪福音战士剧场版:Air/真心为你 新世紀エヴァンゲリオン劇場版 Ai | 9.4 |
9 | 这个杀手不太冷 | 9.4 |
3.条件选择
选择产地为美国的所有电影
Df['产地']=='美国'
运行结果
:
0 True
1 True
2 False
3 True
4 False
...
38733 False
38734 True
38735 False
38736 False
38737 False
Name: 产地, Length: 38738, dtype: bool
返回的结果是bool型的Series,可以用此Series作为索引
#就看前五行
Df[Df['产地']=='美国'][:5]
Unnamed: 0 | 名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.0 | 肖申克的救赎 | 692795.0 | 剧情/犯罪 | 美国 | 1994-09-10 00:00:00 | 142 | 1994 | 9.6 | 多伦多电影节 |
1 | 1.0 | 控方证人 | 42995.0 | 剧情/悬疑/犯罪 | 美国 | 1957-12-17 00:00:00 | 116 | 1957 | 9.5 | 美国 |
3 | 3.0 | 阿甘正传 | 580897.0 | 剧情/爱情 | 美国 | 1994-06-23 00:00:00 | 142 | 1994 | 9.4 | 洛杉矶首映 |
5 | 5.0 | 泰坦尼克号 | 157074.0 | 剧情/爱情/灾难 | 美国 | 2012-04-10 00:00:00 | 194 | 2012 | 9.4 | 中国大陆 |
6 | 6.0 | 辛德勒的名单 | 306904.0 | 剧情/历史/战争 | 美国 | 1993-11-30 00:00:00 | 195 | 1993 | 9.4 | 华盛顿首映 |
选择产地为美国,并且评分大于9的所有电影
#可以直接写Df.产地 比写中括号简单
Df[(Df.产地=='美国')&(Df.评分>9)]
Unnamed: 0 | 名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.0 | 肖申克的救赎 | 692795.0 | 剧情/犯罪 | 美国 | 1994-09-10 00:00:00 | 142 | 1994 | 9.6 | 多伦多电影节 |
1 | 1.0 | 控方证人 | 42995.0 | 剧情/悬疑/犯罪 | 美国 | 1957-12-17 00:00:00 | 116 | 1957 | 9.5 | 美国 |
3 | 3.0 | 阿甘正传 | 580897.0 | 剧情/爱情 | 美国 | 1994-06-23 00:00:00 | 142 | 1994 | 9.4 | 洛杉矶首映 |
5 | 5.0 | 泰坦尼克号 | 157074.0 | 剧情/爱情/灾难 | 美国 | 2012-04-10 00:00:00 | 194 | 2012 | 9.4 | 中国大陆 |
6 | 6.0 | 辛德勒的名单 | 306904.0 | 剧情/历史/战争 | 美国 | 1993-11-30 00:00:00 | 195 | 1993 | 9.4 | 华盛顿首映 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
37951 | 37951.0 | 欢乐树的朋友们:赶尽杀绝 | 4151.0 | 喜剧/动画 | 美国 | 2005-11-28 00:00:00 | 84 | 2005 | 9.2 | 美国 |
38119 | 38119.0 | 山那边 | 70.0 | 剧情 | 美国 | 1975-11-14 00:00:00 | 103 | 1975 | 9.1 | 美国 |
38452 | 38452.0 | 奎 | 62.0 | 纪录片/短片 | 美国 | 2015-08-19 00:00:00 | 9 | 2015 | 9.1 | 纽约电影论坛 |
38465 | 38465.0 | 十二怒汉 | 466.0 | 剧情/悬疑/犯罪 | 美国 | 1954-09-20 00:00:00 | 52 | 1954 | 9.3 | 美国 |
38690 | 38690.0 | 周六夜现场 | 193.0 | 喜剧/音乐 | 美国 | 2003-10-11 00:00:00 | 90 | 2003 | 9.4 | 美国 |
300 rows × 10 columns
选择产地为美国或中国大陆,并且评分大于9的所有电影
Df[((Df.产地=='美国')|(Df.产地=='中国大陆'))&(Df.评分>9)]
Unnamed: 0 | 名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.0 | 肖申克的救赎 | 692795.0 | 剧情/犯罪 | 美国 | 1994-09-10 00:00:00 | 142 | 1994 | 9.6 | 多伦多电影节 |
1 | 1.0 | 控方证人 | 42995.0 | 剧情/悬疑/犯罪 | 美国 | 1957-12-17 00:00:00 | 116 | 1957 | 9.5 | 美国 |
3 | 3.0 | 阿甘正传 | 580897.0 | 剧情/爱情 | 美国 | 1994-06-23 00:00:00 | 142 | 1994 | 9.4 | 洛杉矶首映 |
4 | 4.0 | 霸王别姬 | 478523.0 | 剧情/爱情/同性 | 中国大陆 | 1993-01-01 00:00:00 | 171 | 1993 | 9.4 | 香港 |
5 | 5.0 | 泰坦尼克号 | 157074.0 | 剧情/爱情/灾难 | 美国 | 2012-04-10 00:00:00 | 194 | 2012 | 9.4 | 中国大陆 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
37951 | 37951.0 | 欢乐树的朋友们:赶尽杀绝 | 4151.0 | 喜剧/动画 | 美国 | 2005-11-28 00:00:00 | 84 | 2005 | 9.2 | 美国 |
38119 | 38119.0 | 山那边 | 70.0 | 剧情 | 美国 | 1975-11-14 00:00:00 | 103 | 1975 | 9.1 | 美国 |
38452 | 38452.0 | 奎 | 62.0 | 纪录片/短片 | 美国 | 2015-08-19 00:00:00 | 9 | 2015 | 9.1 | 纽约电影论坛 |
38465 | 38465.0 | 十二怒汉 | 466.0 | 剧情/悬疑/犯罪 | 美国 | 1954-09-20 00:00:00 | 52 | 1954 | 9.3 | 美国 |
38690 | 38690.0 | 周六夜现场 | 193.0 | 喜剧/音乐 | 美国 | 2003-10-11 00:00:00 | 90 | 2003 | 9.4 | 美国 |
339 rows × 10 columns
五.缺失值及异常值的处理
1.缺失值处理方法
2.判断缺失值
#整份数据查看
Df.isnull()
Unnamed: 0 | 名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | False | False | False | False | False | False | False | False | False | False |
1 | False | False | False | False | False | False | False | False | False | False |
2 | False | False | False | False | False | False | False | False | False | False |
3 | False | False | False | False | False | False | False | False | False | False |
4 | False | False | False | False | False | False | False | False | False | False |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
38733 | False | False | False | False | False | False | False | False | False | False |
38734 | False | False | False | False | False | False | False | False | False | False |
38735 | False | False | False | False | False | False | False | False | False | False |
38736 | False | False | False | False | False | False | False | False | False | False |
38737 | False | False | False | False | False | False | False | False | False | False |
38738 rows × 10 columns
一列一列看
Df['名字'].isnull()
运行结果
:
0 False
1 False
2 False
3 False
4 False
...
38733 False
38734 False
38735 False
38736 False
38737 False
Name: 名字, Length: 38738, dtype: bool
返回的布尔值Series可作为索引
#前五行
Df[Df['名字'].isnull()][:5]
Unnamed: 0 | 名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|---|
231 | 231.0 | NaN | 144.0 | 纪录片/音乐 | 韩国 | 2011-02-02 00:00:00 | 90 | 2011 | 9.7 | 美国 |
361 | 361.0 | NaN | 80.0 | 短片 | 其他 | 1905-05-17 00:00:00 | 4 | 1964 | 5.7 | 美国 |
369 | 369.0 | NaN | 5315.0 | 剧情 | 日本 | 2004-07-10 00:00:00 | 111 | 2004 | 7.5 | 日本 |
372 | 372.0 | NaN | 263.0 | 短片/音乐 | 英国 | 1998-06-30 00:00:00 | 34 | 1998 | 9.2 | 美国 |
374 | 374.0 | NaN | 47.0 | 短片 | 其他 | 1905-05-17 00:00:00 | 3 | 1964 | 6.7 | 美国 |
查看非缺失数据
#看不缺失的
Df[Df['评分'].notnull()][:5]
Unnamed: 0 | 名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.0 | 肖申克的救赎 | 692795.0 | 剧情/犯罪 | 美国 | 1994-09-10 00:00:00 | 142 | 1994 | 9.6 | 多伦多电影节 |
1 | 1.0 | 控方证人 | 42995.0 | 剧情/悬疑/犯罪 | 美国 | 1957-12-17 00:00:00 | 116 | 1957 | 9.5 | 美国 |
2 | 2.0 | 美丽人生 | 327855.0 | 剧情/喜剧/爱情 | 意大利 | 1997-12-20 00:00:00 | 116 | 1997 | 9.5 | 意大利 |
3 | 3.0 | 阿甘正传 | 580897.0 | 剧情/爱情 | 美国 | 1994-06-23 00:00:00 | 142 | 1994 | 9.4 | 洛杉矶首映 |
4 | 4.0 | 霸王别姬 | 478523.0 | 剧情/爱情/同性 | 中国大陆 | 1993-01-01 00:00:00 | 171 | 1993 | 9.4 | 香港 |
3.填充缺失值
数字型数据可用均值、中值等进行填充
#无缺失值
Df[Df['投票人数'].isnull()]
Unnamed: 0 | 名字 | 投票人数 | 类型 | 产地 | 上映时间 | 时长 | 年代 | 评分 | 首映地点 |
---|
很尴尬,这份数据的评分、投票人数等等数字型数据没有缺失值,那就人为构造吧
#添加复仇者联盟3
dit = {'名字': '复仇者联盟3:无限战争', '投票人数': np.nan, '类型': '科幻', '产地': '美国',
'上映时间': '2018-05-11', '时长': pandas GroupBy上的方法apply:一般性的“拆分-应用-合并”