Pandas学习day-01
import pandas as pd
import numpy as np
Pandas基本数据结构
pandas中有两种基本结构
Series
一维数组,与numpy中得array类似,与python中的基本数据结构List也相近。Series能保存不同的数据类型。
DataFrame
二维的表格型数据结构。
Pandas的Series类型
一维Series可以用一维列表初始化
s=pd.Series([1,3,5,np.nan,6,8])
s
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
s=pd.Series([1,3,5,np.nan,6,8],index=['a','b','c','d','e','f'])
s
a 1.0
b 3.0
c 5.0
d NaN
e 6.0
f 8.0
dtype: float64
索引数据的行标签
s.index
Index(['a', 'b', 'c', 'd', 'e', 'f'], dtype='object')
s.values
array([ 1., 3., 5., nan, 6., 8.])
s[0]
1.0
s[3]
nan
切片操作
s[2:5]
c 5.0
d NaN
e 6.0
dtype: float64
s[::2]
a 1.0
c 5.0
e 6.0
dtype: float64
索引赋值
s.index.name='索引'
s
索引
a 1.0
b 3.0
c 5.0
d NaN
e 6.0
f 8.0
dtype: float64
pandas的DataFrame类型
构造一个时间序列
date=pd.date_range('20180101',periods=6)
date
DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04',
'2018-01-05', '2018-01-06'],
dtype='datetime64[ns]', freq='D')
传入二维数组
df=pd.DataFrame(np.random.randn(6,4),index=date,columns=list('ABCD'))
df
ABCD2018-01-010.2763670.235869-0.8633730.7857982018-01-02-0.5858900.142942-0.504779-1.3700402018-01-03-0.607308-0.9835480.3108150.3384972018-01-040.025879-0.442640-0.8624321.2046142018-01-05-0.2781210.2727110.491046-0.1144472018-01-06-0.042118-0.761489-2.086405-0.566671
使用字典传入数据
df2=pd.DataFrame({'A':1,
'B':pd.Timestamp('20180101'),
'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'})
df2
ABCDEF012018-01-011.03testabc112018-01-011.03trainabc212018-01-011.03testabc312018-01-011.03trainabc
查看数据
head和tail查看头尾几行数据,默认为5。
df.head()
ABCD2018-01-010.2763670.235869-0.8633730.7857982018-01-02-0.5858900.142942-0.504779-1.3700402018-01-03-0.607308-0.9835480.3108150.3384972018-01-040.025879-0.442640-0.8624321.2046142018-01-05-0.2781210.2727110.491046-0.114447
df.tail(3)
ABCD2018-01-040.025879-0.442640-0.8624321.2046142018-01-05-0.2781210.2727110.491046-0.1144472018-01-06-0.042118-0.761489-2.086405-0.566671
下标,列标,数据
下标使用index
df.index
DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04',
'2018-01-05', '2018-01-06'],
dtype='datetime64[ns]', freq='D')
列标使用columns属性查看
df.columns
Index(['A', 'B', 'C', 'D'], dtype='object')
数据值使用values查看
df.values
array([[ 0.27636662, 0.23586885, -0.86337336, 0.78579775],
[-0.58588988, 0.14294223, -0.50477922, -1.37003977],
[-0.60730841, -0.98354839, 0.31081542, 0.33849741],
[ 0.02587881, -0.44264039, -0.86243218, 1.20461397],
[-0.27812082, 0.27271064, 0.49104565, -0.11444685],
[-0.04211835, -0.76148874, -2.0864052 , -0.56667069]])
Pandas读取数据及数据操作
df=pd.read_excel('豆瓣电影数据.xlsx')
行操作
df.iloc[0]
名字 肖申克的救赎
投票人数 692795
类型 剧情/犯罪
产地 美国
上映时间 1994-09-10 00:00:00
时长 142
年代 1994
评分 9.6
首映地点 多伦多电影节
Name: 0, dtype: object
df.iloc[0:5]
名字投票人数类型产地上映时间时长年代评分首映地点0肖申克的救赎692795.0剧情/犯罪美国1994-09-10 00:00:0014219949.6多伦多电影节1控方证人42995.0剧情/悬疑/犯罪美国1957-12-17 00:00:0011619579.5美国2美丽人生327855.0剧情/喜剧/爱情意大利1997-12-20 00:00:0011619979.5意大利3阿甘正传580897.0剧情/爱情美国1994-06-23 00:00:0014219949.4洛杉矶首映4霸王别姬478523.0剧情/爱情/同性中国大陆1993-01-01 00:00:0017119939.4香港
iloc与loc的区别(loc左闭右闭的区间)
df.loc[0:5]
名字投票人数类型产地上映时间时长年代评分首映地点0肖申克的救赎692795.0剧情/犯罪美国1994-09-10 00:00:0014219949.6多伦多电影节1控方证人42995.0剧情/悬疑/犯罪美国1957-12-17 00:00:0011619579.5美国2美丽人生327855.0剧情/喜剧/爱情意大利1997-12-20 00:00:0011619979.5意大利3阿甘正传580897.0剧情/爱情美国1994-06-23 00:00:0014219949.4洛杉矶首映4霸王别姬478523.0剧情/爱情/同性中国大陆1993-01-01 00:00:0017119939.4香港5泰坦尼克号157074.0剧情/爱情/灾难美国2012-04-10 00:00:0019420129.4中国大陆
添加一行
dic={'名字':'复仇者联盟3',
'投票人数':123456,
'类型':'剧情/科幻',
'产地':'美国',
'上映时间':2018-5-4,
'时长':142,
'年代':2018,
'评分':np.nan,
'首映地点':'美国'}
s=pd.Series(dic)
s.name=38738
s
名字 复仇者联盟3
投票人数 123456
类型 剧情/科幻
产地 美国
上映时间 2009
时长 142
年代 2018
评分 NaN
首映地点 美国
Name: 38738, dtype: object
df=df.append(s)
df.tail(1)
Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点38738NaN复仇者联盟3123456.0剧情/科幻美国20091422018NaN美国
删除一行
df = df.drop([38738])
df.tail(5)
名字投票人数类型产地上映时间时长年代评分首映地点38733神学院 S46.0Adult法国1905-06-05 00:00:005819838.6美国387341935年57.0喜剧/歌舞美国1935-03-15 00:00:009819357.6美国38735血溅画屏95.0剧情/悬疑/犯罪/武侠/古装中国大陆1905-06-08 00:00:009119867.1美国38736魔窟中的幻想51.0惊悚/恐怖/儿童中国大陆1905-06-08 00:00:007819868.0美国38737列宁格勒围困之星火战役 Блокада: Фильм 2: Ленинградский ме…32.0剧情/战争苏联1905-05-30 00:00:009719776.6美国
列操作
df.columns
Index(['名字', '投票人数', '类型', '产地', '上映时间', '时长', '年代', '评分', '首映地点'], dtype='object')
df['名字'][:5]
0 肖申克的救赎
1 控方证人
2 美丽人生
3 阿甘正传
4 霸王别姬
Name: 名字, dtype: object
增加列
df['序号']=range(1,len(df)+1)
df.head()
名字投票人数类型产地上映时间时长年代评分首映地点序号0肖申克的救赎692795.0剧情/犯罪美国1994-09-10 00:00:0014219949.6多伦多电影节11控方证人42995.0剧情/悬疑/犯罪美国1957-12-17 00:00:0011619579.5美国22美丽人生327855.0剧情/喜剧/爱情意大利1997-12-20 00:00:0011619979.5意大利33阿甘正传580897.0剧情/爱情美国1994-06-23 00:00:0014219949.4洛杉矶首映44霸王别姬478523.0剧情/爱情/同性中国大陆1993-01-01 00:00:0017119939.4香港5
删除列
df = df.drop('序号',axis=1)
df[-5:]
名字投票人数类型产地上映时间时长年代评分首映地点38733神学院 S46.0Adult法国1905-06-05 00:00:005819838.6美国387341935年57.0喜剧/歌舞美国1935-03-15 00:00:009819357.6美国38735血溅画屏95.0剧情/悬疑/犯罪/武侠/古装中国大陆1905-06-08 00:00:009119867.1美国38736魔窟中的幻想51.0惊悚/恐怖/儿童中国大陆1905-06-08 00:00:007819868.0美国38737列宁格勒围困之星火战役 Блокада: Фильм 2: Ленинградский ме…32.0剧情/战争苏联1905-05-30 00:00:009719776.6美国
通过标签选择数据
df.loc[[index],[colunm]] 通过标签选择数据
df.loc[1,'名字']
'控方证人'
df.loc[[1,3,5,7,9],['名字','评分']]
名字评分1控方证人9.53阿甘正传9.45泰坦尼克号9.47新世纪福音战士剧场版:Air/真心为你 新世紀エヴァンゲリオン劇場版 Ai9.49这个杀手不太冷9.4
条件选择
选择产地为美国的电影
df[df['产地']=='美国'][:5]
Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点00肖申克的救赎692795.0剧情/犯罪美国1994-09-10 00:00:0014219949.6多伦多电影节11控方证人42995.0剧情/悬疑/犯罪美国1957-12-17 00:00:0011619579.5美国33阿甘正传580897.0剧情/爱情美国1994-06-23 00:00:0014219949.4洛杉矶首映55泰坦尼克号157074.0剧情/爱情/灾难美国2012-04-10 00:00:0019420129.4中国大陆66辛德勒的名单306904.0剧情/历史/战争美国1993-11-30 00:00:0019519939.4华盛顿首映
选择产地为美国的电影,并且评分大于9分
df[(df['产地']=='美国')&(df['评分']>9)][:5]
Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点00肖申克的救赎692795.0剧情/犯罪美国1994-09-10 00:00:0014219949.6多伦多电影节11控方证人42995.0剧情/悬疑/犯罪美国1957-12-17 00:00:0011619579.5美国33阿甘正传580897.0剧情/爱情美国1994-06-23 00:00:0014219949.4洛杉矶首映55泰坦尼克号157074.0剧情/爱情/灾难美国2012-04-10 00:00:0019420129.4中国大陆66辛德勒的名单306904.0剧情/历史/战争美国1993-11-30 00:00:0019519939.4华盛顿首映
选择产地为美国或者中国大陆的电影,并且评分大于9分
df[((df.产地=='美国')|(df.产地=='中国大陆'))&(df.评分>9)][:5]
Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点00肖申克的救赎692795.0剧情/犯罪美国1994-09-10 00:00:0014219949.6多伦多电影节11控方证人42995.0剧情/悬疑/犯罪美国1957-12-17 00:00:0011619579.5美国33阿甘正传580897.0剧情/爱情美国1994-06-23 00:00:0014219949.4洛杉矶首映44霸王别姬478523.0剧情/爱情/同性中国大陆1993-01-01 00:00:0017119939.4香港55泰坦尼克号157074.0剧情/爱情/灾难美国2012-04-10 00:00:0019420129.4中国大陆
缺失值及异常值处理方法
缺失值处理方法
方法 说明
dropna 删除缺失值
fillna 填充缺失值
isnull 返回布尔值对象,判断缺失值
notnull isnull的否定式
判断缺失值
df[df['评分'].isnull()][:10]
Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点38738NaN复仇者联盟3123456.0剧情/科幻美国20091422018NaN美国
填充缺失值
df['评分'].fillna(np.mean(df['评分']),inplace=True)
df[-5:]
Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点3873438734.01935年57.0喜剧/歌舞美国1935-03-15 00:00:009819357.600000美国3873538735.0血溅画屏95.0剧情/悬疑/犯罪/武侠/古装中国大陆1905-06-08 00:00:009119867.100000美国3873638736.0魔窟中的幻想51.0惊悚/恐怖/儿童中国大陆1905-06-08 00:00:007819868.000000美国3873738737.0列宁格勒围困之星火战役 Блокада: Фильм 2: Ленинградский ме…32.0剧情/战争苏联1905-05-30 00:00:009719776.600000美国38738NaN复仇者联盟3123456.0剧情/科幻美国200914220186.935704美国
删除缺失值
df.dropna() 参数
how=’all’ 删除全为空值的行或者列
inplace=True 覆盖之前的数据
axis=0 选择行或者列
处理异常值
df[df.投票人数<0]
Unnamed: 0名字投票人数类型产地上映时间时长年代评分首映地点1977719777.0皇家大贼 皇家大-80.0剧情/犯罪中国香港1985-05-31 00:00:006019856.3美国1978619786.0日本的垃圾去中国大陆 にっぽんの”ゴミ” 大陆へ渡る ~中国式リサイクル錬-80.0纪录片日本1905-06-26 00:00:006020047.9美国1979719797.0女教徒-118.0剧情法国1966-05-06 00:00:0013519667.8美国
数据保存
df.to_excel('moive_data.xlsx')
Original: https://blog.csdn.net/qq_38398516/article/details/121099248
Author: 抱紧我的糖果罐
Title: Pnadas学习day-01
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/743491/
转载文章受原作者版权保护。转载请注明原作者出处!