Python—–pandas初识以及电影数据分析

首页 » 数据科学库 » 正文

Pandas 作用:结构化数据分析,例如:学生成绩分析,股票数据分析

Pandas 数据结构:

Series: 序列

dataframe: 二维的数组

1.用列表创建series:s1 = pd.Series([1,3,5,np.NaN,8,4])

   用字典创建:

d={'a':0,'b':1,'d':3}
s = pd.Series(d,index=list('abcd'))

 

    用标量创建:

s = pd.Series(5,index=list('abcd'))

2.创建日期序列:

datas = pd.date_range('20200707', periods=6)  periods 表示创建几个日期

3.创建二维数组:

data1 = pd.DataFrame(np.random.randn(6, 4), index=datas, columns=list('ABCD'))

 

以上创建的是六行四列的随机数,索引是创建的日期序列(行标签),列标签是abcd

4.用字典创建二维数组

d ={'A':1, 'B':pd.Timestamp('20200707'),'C':range(4),'D':np.arange(4)}
df =pd.DataFrame(d)

注意,cd里面数的个数要相同不然会报错

5.查看数据:

头部数据:data.head()

尾部数据:data.tail() (括号里为空默认是前/后五行,可以自行填入要查看的行数个数)

行标签:data.index

列标签:data.columns

列表值:data.values(查看ny里的数组)

数据整体情况:data.describe()(基本统计数据)

6.数据排序:

列标签排序:data.sort_index(axis=1)(升序)    data.sort_index(axis=1,ascending=False)(降序)

行标签排序:data.sort_index(axis=0)(升序)   data.sort_index(axis=1,ascending=False)(降序)

值排序:data.sort_values(by='A') (将A列排序)

7.数据选择:

通过标签选择:data.loc['',''] 如果想通过位置来选择标签:data.iloc[2:4]/ dataiat[2:4](iat更加高效)

访问特定值:data.at[pd.Timestamp('20200707'),'B'] (需要传入原生的数据结构)

8.数据添加:

tag= ['a']*2+ ['b']*2 +['c']*2
data1['TAG']=tag

9.空数据处理:

丢弃空数据:data.dropna()

替换空数据:data.fillna(value=5)

查看空数据:pd.isnull(data).any().any()

10.数据分组:

data.groupby(['A','B']),sum()

11.数据整形:

index = pd.MultiIndex.from_tuples(tuples,names=['first','second'])

df=pd.DataFrame(np.random.randn(8,2),index=index,columns=['A','B'])

stacked =df.stack()

将行索引变成列索引

12.数据透视:

df.pivot_table(values=['D'],index=['A','B'],COLUMN=['C'])

以AB为行数列,C为列数列,D为值的列表

时间序列

rng = pd.date_range('20200707',period=600,freq='s')
s=pd.Series(np.random.randint(0,500,len(rng)))

重新采样采用:

s.resample('2Min',how='mean')

时间计算:

pd.Timestamp('20200707') -/+ pd.Timestamp('20200101')

数据可视化:

s = pd.Series(np.random.randn(1000), index=pd.date_range('20200707', periods=1000))
s = s.cumsum()
s.plot()

数据读写:

df = pd.DataFrame(np.random.randn(100,4),columns=list('ABCD'))
df.to_csv('data.csv')

pd.read_csv('data_csv',index_col=0)

电影数据分析

1.数据库导入:

unames = ['user_id', 'gender', 'age', 'occupation', 'zip']
users = pd.read_csv('D:/ml-1m/users.dat', sep='::', header=None, names=unames)

rating_names = ['user_id', 'movie_id', 'rating', 'timestamp']
ratings = pd.read_csv('D:/ml-1m/ratings.dat', sep='::', header=None, names=rating_names)

movie_names = ['movie_id', 'title', 'genres']
movies = pd.read_csv('D:/ml-1m/movies.dat', sep='::', header=None, names=movie_names)

2. 数据合并以及检索性别:

data = pd.merge(pd.merge(users, ratings), movies)
print(len(data))

ratings_by_gender = data.pivot_table (values='rating',index='title',columns='gender',aggfunc='mean')
print(ratings_by_gender.head(10))

3.算出男女喜爱差异并且排序:

ratings_by_gender['diff'] = ratings_by_gender.F - ratings_by_gender.M
print(ratings_by_gender.head(10))

print(ratings_by_gender.sort_values(by='diff',ascending=False).head(10))

4.列出十大最多评价电影:

ratings_by_title =data.groupby('title').size()
print(ratings_by_title.sort_values(ascending=False).head(10))

5.列出二十大高分电影:

mean_ratings = data.pivot_table(values='rating', index='title', aggfunc='mean')
print(mean_ratings.head(10))
print(mean_ratings.sort_values(by='rating', ascending=False).head(20))

pandas基本运算

1.重新索引:

s.reindex(list('abcdefg'),fill_value=0)

用前面的值来填充空的位置:

s.reindex(list('abcdefg'),method='ffill')

只对行有效对列无效

2.丢弃数据:

df.drop('A')

3.按列/行计算:

df.apply(lambda x:x.max()-x.min())按列
df.apply(lambda x:x.max()-x.min(),axis=1)按行

4.排序排名:

df.sort_values(by='two',ascending=False)
s.rank[method='first']  默认算平均值,通过加入括号内代码,先出现排名前

 

 

未经允许不得转载:作者:1146-陶同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《Python—–pandas初识以及电影数据分析》 发布于2020-07-08

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录