科学数据库(Pandas)——第二节 pandas之DataFrame

目录

 

DataFrame的创建

DataFrame基本操作

pandas之loc

pandas之iloc

pandas之布尔索引

缺失数据的处理

pandas常用统计方法


DataFrame的创建

方法一:向DataFrame传入数组

可以指定索引的名称:

方法二:通过字典传入DataFrame

DataFrame基本操作

#coding=utf-8
import pandas as pd
df = pd.read_csv("dogNames2.csv")
# print(df.head())
# print(df.info())

#dataframe中排序的方法
df=df.sort_values(by="Count_AnimalName",ascending=False) #by指定需要排序的索引名称   ascending升序


#Dataframe的索引和切片

#--方括号写数字,表示对行进行操作
print(df[:20])   #取前20行记录

#--方括号写字符串,表示对列进行操作
print(df[:20]["Row_Labels"])#先选取前20行记录,再选取Row_Labels标签对应的列

pandasloc

df.loc 通过标签引行数据

pandasiloc

df.iloc 通过位置取行数据

#loc与iloc的使用
import pandas as pd
import numpy as np
t1 = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("WXYZ"))
#可以通过赋值更改数据
t1.loc["a","Y"]=100
print(t1)
t1.iloc[1:2,0:2]=200  #这里的冒号”:“左闭右开,只能取到索引号是1行;0、1列的数据
print(t1)

输出结果:

pandas之布尔索引

#coding=utf-8
import pandas as pd
df = pd.read_csv("dogNames2.csv")
print(df[(80<df["Count_AnimalName"])&(df["Count_AnimalName"]<100)])
#打印狗的名字使用次数大于80小于100的狗名字列表

输出结果:

注意点(当出现两个及以上的条件时):

  1. 不同条件之间必须用“&”或者“|”符号连接起来
  2. 不同条件之间必须用括号括起来

 

#coding=utf-8
import pandas as pd
df = pd.read_csv("dogNames2.csv")
print(df["Row_Labels"].str.split("/").tolist())
#tolist可以将series转化成list

缺失数据的处理

判断数据是否为NaNpd.isnull(df),pd.notnull(df)

In [37]: t1
Out[37]:
     W    X   Y   Z
a  0.0  1.0   2   3
b  NaN  NaN   6   7
c  8.0  9.0  10  11

In [38]: pd.isnull(t1)
Out[38]:
       W      X      Y      Z
a  False  False  False  False
b   True   True  False  False
c  False  False  False  False

In [44]: t1[pd.notnull(t1["W"])] #根据W列不是nan的筛选数据
Out[44]:
     W    X   Y   Z
a  0.0  1.0   2   3
c  8.0  9.0  10  11

处理方式1:删除NaN所在的行列dropna (axis=0, how='any', inplace=False)

In [46]: t1.dropna(axis=0)  #删除nan所在的行
Out[46]:
     W    X   Y   Z
a  0.0  1.0   2   3
c  8.0  9.0  10  11

In [47]: t1.dropna(axis=0,how="all")  #all表示删除全部是nan的行
Out[47]:
     W    X   Y   Z
a  0.0  1.0   2   3
b  NaN  NaN   6   7
c  8.0  9.0  10  11

In [48]: t1.dropna(axis=0,how="any",inplace=False) #any表示删除含有nan的行,默认情况下是any
Out[48]:                             #inplace=True表示原地替代,t1不用赋值也可以改变
     W    X   Y   Z
a  0.0  1.0   2   3
c  8.0  9.0  10  11

处理方式2:填充数据,t.fillna()

#1、填充数字
In [49]: t1
Out[49]:
     W    X   Y   Z
a  0.0  1.0   2   3
b  NaN  NaN   6   7
c  8.0  9.0  10  11

In [51]: t1.fillna(10)
Out[51]:
      W     X   Y   Z
a   0.0   1.0   2   3
b  10.0  10.0   6   7
c   8.0   9.0  10  11

#2、填充均值
In [54]: t1.fillna(t1.mean())
Out[54]:
     W    X   Y   Z
a  0.0  1.0   2   3
b  4.0  5.0   6   7
c  8.0  9.0  10  11

#3、填充中位数
In [56]: t1.fillna(t1.median())
Out[56]:
     W    X   Y   Z
a  0.0  1.0   2   3
b  4.0  5.0   6   7
c  8.0  9.0  10  11

pandas常用统计方法

练习1:假设现在我们有一组从2006年到20161000部最流行的电影数据,我们想知道这些电影数据中评分的平均分,导演的人数等信息,我们应该怎么获取?

 

练习2:对于这一组电影数据,如果我们想ratingruntime的分布情况,应该如何呈现数据?

#统计runtime的分布情况
#coding=utf-8
import pandas as pd
from matplotlib import pyplot as plt
file_path="MDB-Movie-Data.csv"
df=pd.read_csv(file_path)

#rating,runtime的分布情况
#1、选择图形,分布情况——直方图
#准备数据
runtime_data=df["Runtime (Minutes)"].values
max_runtime=runtime_data.max()
min_runtime=runtime_data.min()
#计算组数
print((max_runtime-min_runtime))
num_bin=((max_runtime-min_runtime))//5
#设置图形大小
plt.figure(figsize=(20,8),dpi=80)
plt.hist(runtime_data,num_bin)

plt.xticks(range(min_runtime,max_runtime+5,5))
plt.show()

 结果展示:

#统计rating的分布情况
#coding=utf-8
import pandas as pd
from matplotlib import pyplot as plt
file_path="MDB-Movie-Data.csv"
df=pd.read_csv(file_path)

rating_data=df["Rating"].values
max_rating=rating_data.max()
min_rating=rating_data.min()
#计算组数
print(max_rating)
print(min_rating)
#因为是不均匀分布,所以以列表的形式传入组数
_x=[min_rating]  
i=min_rating   #用while循环来添加_x列表里的元素
while i < max_rating+0.5:
    i = i+0.5
    _x.append(i)
# #设置图形大小
plt.figure(figsize=(20,8),dpi=80)
plt.hist(rating_data,_x)
plt.xticks(_x)  #设置X轴标签
plt.show()

结果展示:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值