数据处理浅学

读取excel文件:df = pd.read_excel('地址')
展示前五行:df.head()
行操作:
取出:df.iloc[0],df.iloc[0:5]
#  iloc[start,end] 从start取到end-1
df.loc[0:5]
#  iloc[start,end] 从start取到end
df.tail()是从末尾读取数据,不填写数字,默认读取最后五条

添加一行:dataframe的本质仍是键值对,向里面添加一行可以通过创建字典,再添加进去
dic={} //其中不能缺少元素
s = pd.Series(dic)
s.name = 38730 //必须设置行标签,不然加入不进去  //为什么不是index?????????
df1 = df.append(s)

删除行元素:
df1 = df1.drop(38730) //其中填写行标签
#  删除后可以通过df.tail()检验是否成功删除

列操作:

删除列
法一:del df['Unnamed: 0']
#  建议列标复制,避免出错
法二:df = df.drop('Unnamed: 0',axis=1)  //尝试axis = 1是不是删除行!!!!!!!!

查看前五行电影的名字:df[['名字','类型']][:5]

添加一列:
df1['序号'] = range(1,len(df1)+1 )

通过标签选择数据:df.loc[index][column1]
df1.loc[[1,2,3],['名字','首映地点']]

条件选择数据://记得加括号!!!
df[df['产地']=='美国']
df[((df['产地']=='美国')|(df['产地']=='中国大陆'))&(df['评分']>9)]

# 去重
df1.drop_duplicates(inplace = True) //inplace ???????????????

#缺失值处理
df[df['评分'].isnull()]
#填充缺失值
df['评分'].fillna(np.mean(df['评分']),inplace=True)
#  删除有缺失值的行
df = df.dropna()

#  异常值处理
df.drop(df[df['评分']>10].index,inplace = True)
#  当删除一行后,记得重置索引!!!
df.index = range(len(df))

存储数据
df.to_excel('地址',index=False)
index=False的意思是不存储索引

总结:
对数据进行初步处理的时候,
先去重,然后诊断缺失值,填充缺失值,数值类型的可以用平均值填充;
然后诊断异常值,删除异常值
对行或者列进行按需操作


直方图:
import numpy as np
import matplotlib.pyplot as plt
plt.hist(x,bins=10,color='r') // bins表示分成几个长方体


条形图
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'  //解决中文问题
plt.title('   ')
plt.xlabel('   ')
plt.ylabel('   ')
# 给列标签加上数值
for a,b in zip(x,y):
     #  第一个参数:x轴的位置,第二个参数:y轴的位置,第三个参数:显示的内容
     plt.text(a,b,b,ha='center',va='bottom',fontsize=12)

# 画图
plt.bar(x,y,width=0.5,color='r',label='   ')
# 显示图例
plt.legend()
plt.show()

折线图:
import numpy as np
import matplotlib.pyplot as plt
plt.plot(x,y)
plt.show()

散点图:
import numpy as np
import matplotlib.pyplot as plt
plt.scatter(x,y)
plt.show()

饼状图:
import matplotlib.pyplot as plt
labels = ['j','i','a']
values = [20,9,1]
plt.pie(x=values,labels = labels,autopct='%.0f%%',shadow = True)
plt.show()


案例一:柱状图
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
df = pd.read_excel('../movie2.xlsx')  //读取excel
data = df['产地'].value_counts()
x = data.index
y = data.value

plt.figure(figsize=(5,4))  //设置画布的长和宽

for a,b in zip(x,y):
     plt.text(a,b,b,ha='center',va='bottom',fontsize=12)

plt.bar(x,y,label='')
# 调整x轴竖着显示
plt.tick_params(labelsize=10)
plt.xticks(rotation=90)
plt.legend()
plt.show()

案例二:折线图
data = df['年代'].value_counts()
#按照行标签从小到大排列
data = data.sort_index()
x = data.index
y = data.values
plt.plot(x,y,label='',color='')
plt.legend()
plt.show()

案例三:散点图
x = df['时长'][::100]
y = df['评分'][::100]
plt.scatter(x,y,color='')
plt.show()


案例四:直方图
data = df['评分']
plt.hist(data,bins=10,edgecolor='k',alpha=0.5)
plt.show()


案例五:
data = pd.cut(df['时长'],[0,60,90,110,1000]).value_counts()
value = data.values
label = data.index
plt.pie(value,labels = label,autopct='%.2f%%',shadow=True)
plt.legend()
plt.show()


#  数据类型转换

df.info()  显示数据类型
df['年代'] = df['年代'].astype(np.int32)

# 排序
df.sort_values(by='投票人数',ascending=False)
df.sort_values(by=['评分','投票人数'],ascending=True)[0:10]
true是升序,false是降序。默认为升序

# 基本统计分析
df.describe()

#最值
df['投票人数'].max()
df['投票人数'].min()

#均值
df['投票人数'].mean()

#中值
df['投票人数'].median()

#求和
df['投票人数'].sum()

# 相关系数
df[['投票人数','评分']].corr()

#协方差
df[['投票人数','评分']].cov

#一共多少部电影
len(df)

# 影片来自多少国家
df['产地'].unique()

#单改
df['产地'].replace('中国','中国大陆',inpalce=True)
#多改
df['产地'].replace(['中国大陆','中国香港','中国台湾'],['中国','中国','中国'],inplace=True)

#电影来自那些年份
df['年代'].unique()

#每一年的电影数量
df['年代'].value_counts()
df['年代'].value_counts()[0:5]


#分组统计
group = df.groupby(df['年代'])
group.mean()

#计算每年的平均评分
df['评分'].groupby(df['年代']).mean()

# 每一个地区每一年的电影评分平均值
df['评分'].groupby([df['产地'],df['年代']]).mean()

# 离散化处理
df['评分等级'] = pd.cut(df['评分'],[0,3,5,7,9,10],labels=['E', 'D', 'C', 'B', 'A'])

pd.set_option('max_columns',10)
df[df['评分等级']=='E']

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值