#Pandas/Python Data Analysis Library
#导入
import pandas as pd
import numpy as np
#基本数据结构
#一维数组 Series 类似array/list 与array差别: 能保存不同类型的数据 左闭右闭的区间
a=pd.Series([1,2,3,np.nan],index=['a','b','c','d']) #自定义索引类型
a
#查看索引
a.index # 输出Index(['a', 'b', 'c', 'd'], dtype='object')
#查看值
a.values # array([ 1., 2., 3., nan])
a[3]
#切片
a[::2]
#索引列命名
a=pd.Series([1,2,3,np.nan])
a.index.name='索引'
#后续索引赋值
a.index=list('abcd') #索引与数据项的个数一致
#左闭右闭
a['a':'c']
#-------------------------------------------
#二维 dataframe数据表
date=pd.date_range('20180101',periods=6)
#索引行index 索引列columns
df=pd.DataFrame(np.random.randn(6,4),index=date,columns=list('abcd'))
df.index.name='日期'
df
#字典传入数据 key作为索引
df2=pd.DataFrame({'A':1,'B':pd.Timestamp('20181001'),'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':'abcd'})
df2
#查看遍历数据
#行查看
df2.head()#默认为5
df2.tail(3)#最后3行#默认为5
#下标 列标 数据
df.index
df.columns
df.values
#数据读取与操作
df=pd.read_excel('豆瓣电影数据.xlsx')
df.head()
#行操作
df.iloc[0]
df.iloc[0:5]#左闭右开
df.loc[0:5]#左闭右闭
dit={'名字':'复仇者联盟3','投片人数':123456,'类型':'剧情/科幻','产地':'美国','上映时间':'2018-05-4 00:00:00','时长':142,'年代':2018,'评分':9.9}
s=pd.Series(dit)
s.name=38738
s
df=df.append(s) #传入一行属性一定要对齐
df=df.drop([38738])#选定某行的index值
df[-5:]
#列操作
df.columns
df[['名字','类型']][:5] #list的对象
#增加列
df['序号']=range(1,len(df)+1) #range(a,b) 左闭右开
df[:5]
#删除列
df=df.drop('序号',axis=1) #维度/轴 行默认为0 列为1
df[:5]
#--------------------------------------
#通过标签选择数据 df.loc[[index],[column]]
df.loc[1,'名字'] #[行,列]
df.loc[[1,3,5,7,9],['名字','评分']]
#条件选择
df[df['产地']=='美国'][:5] #产地为美国的电影
df[(df['产地']=='美国')&(df['评分']>9)] #产地为美国且评分大于9
df[(df.产地=='美国')&(df.评分>9)][:5]
df[((df.产地=='美国')|(df.产地=='中国大陆'))&(df.评分>9)]
#缺失值 异常值处理 数据清洗
#缺失值 删 填 判断
df[df['名字'].notnull()]
#填充
df[df['投片人数'].isnull()][:10]
df['投片人数'].fillna(np.mean(df['投票人数']),inplace=True)
df[df['投片人数'].isnull()]
#删除
# df.dropna()
#how='all' 删除全为空值的行或列
#inplace=True 覆盖
#axis=0 选择行或列
print(len(df))
df2=df.dropna()
print(len(df2))
df3=df
df3.dropna(inplace=True)
print(len(df3))
#处理异常值/离群点 删除/格式转换
df=df[df.投票人数<0]
df=df[df.投票人数%1!=0]
#数据保存
df.to_excel('movie_data.xlsx')
运行截图