Python学习笔记--机器学习科学数据库05

1.数据的合并和分组聚合(字符串离散化的案例)


import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from matplotlib import pyplot as py
file_path='IMDB-Movie-Data.csv'


df=pd.read_csv(file_path)
#print(df.head(1))
print(df['Genre'])
##统计分类的列表
temp_list=df["Genre"].str.split(',').to_list()  #列表嵌套列表
genre_list=list(set([i for j in temp_list for i in j]))
##构造全为0的数组
zero_df=pd.DataFrame(np.zeros((df.shape[0],len(genre_list))),columns=genre_list)
##print(zero_df)
##给每个电影出现分类的位置赋值1
for i in range(df.shape[0]):
    #zeros_df.loc[0,['Sci-fi','Mucical']]=1
    zero_df.loc[i,temp_list[i]]=1
#print(zero_df.head(3))
##统计每个分类的电影的数量和
print('**88888888888888888888')
genre_count=zero_df.sum(axis=0)
print(genre_list)
##排序
genre_count=genre_count.sort_values()
_x=genre_count.index
_y=genre_count.values
##画图
plt.figure(figsize=(20,8),dpi=80)
plt.bar(range(len(_x)),_y,width=0.4,color="orange")
plt.xticks(range(len(_x)),_x)

plt.show()

2.数组的合并之join

join:默认情况下是把行行索引相同的数据合并到一起

df1=pd.DataFrame(np.ones((2,4)),index=['A','B'],columns=('a','b','c','d'))
print(df1)
df2=pd.DataFrame(np.zeros((3,3)),index=['A','B','C'],columns=('x','y','z'))
print(df2)
q1=df1.join(df2)
q2=df2.join(df1)
print(q1)
print(q2)

3.数据合并之merge

merge:按照指定的列把数据按照一定的方式合并到一起

inner 并集

merge outer 交集,nan补全

merge left左边为准,nan补全

merge right右边为准,nan补全

df3=pd.DataFrame(np.zeros((3,3)),columns=('f','a','x'))
print(df3)
##在默认情况下,merge取并集
q4=df1.merge(df3,on='a')  ##按照a这一列取并集
print(q4)

print("%%"*50)
df4=pd.DataFrame(np.arange(9).reshape((3,3)),columns=list("fax"))
print(df4)
q5=df1.merge(df4,on="a")
print(q5)

外合并,左合并,右合并

     a    b    c    d  f  x
0  1.0  1.0  1.0  1.0  0  2
1  1.0  1.0  1.0  1.0  0  2
2  4.0  NaN  NaN  NaN  3  5
3  7.0  NaN  NaN  NaN  6  8
     a    b    c    d  f  x
0  1.0  1.0  1.0  1.0  0  2
1  1.0  1.0  1.0  1.0  0  2
     a    b    c    d  f  x
0  1.0  1.0  1.0  1.0  0  2
1  1.0  1.0  1.0  1.0  0  2
2  4.0  NaN  NaN  NaN  3  5
3  7.0  NaN  NaN  NaN  6  8

4.索引和复合索引

获取index: df.index

指定index:df.index={'X','Y'}

重新设置index:df.reindex(list('abcdef'))

指定某一列作为index: df.set_index('Country',drop=Faulse)

返回index的唯一值:df.set_index('Country').index.unique()

练习

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: JMS
@file: my17.py
@time: 2022/05/27
@desc:
"""

##绘制中国每个城市
import matplotlib.pyplot as plt
import pandas as pd
from matplotlib import font_manager
my_font=font_manager.FontProperties(fname='c:\windows\Fonts\simsun.ttc',size=10)


import numpy as np
file_path='./starbucks_store_worldwide.csv'
df=pd.read_csv(file_path)
df=df[df['Country']=='CN']

data1=df.groupby(by='City').count()['Brand'].sort_values(ascending=False)[:25]
_x=data1.index
_y=data1.values
##画图
plt.figure(figsize=(20,8),dpi=80)
plt.bar(range(len(_x)),_y,width=0.3)
plt.xticks(range(len(_x)),_x,fontproperties=my_font)
plt.show()

练习2

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: JMS
@file: my18.py
@time: 2022/05/27
@desc:
"""
import pandas as pd
from matplotlib import pyplot as plt
file_path='./books.csv'
df=pd.read_csv(file_path)
# print(df.head(5))
#print(df.info())
##删除有缺失年份的数据,删除有缺失的字段
data1=df[pd.notnull(df['original_publication_year'])]
# grouped=data1.groupby(by='orginal_publication_year').count()['title']

##不同年份书的平均评分情况
##去除orginal_publication_year列中nan的行
grouped=data1['average_rating'].groupby(by=data1['original_publication_year']).mean()
print(grouped)

plt.figure(figsize=(20,8),dpi=80)
_x=grouped.index
_y=grouped.values
plt.plot(range(len(_x)),_y)
plt.xticks(list(range(len(_x)))[::10],_x[::10].astype(int),rotation=45)
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值