目录
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标签对应的列
pandas之loc
df.loc 通过标签索引行数据
pandas之iloc
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的狗名字列表
输出结果:
注意点(当出现两个及以上的条件时):
- 不同条件之间必须用“&”或者“|”符号连接起来
- 不同条件之间必须用括号括起来
#coding=utf-8
import pandas as pd
df = pd.read_csv("dogNames2.csv")
print(df["Row_Labels"].str.split("/").tolist())
#tolist可以将series转化成list
缺失数据的处理
判断数据是否为NaN:pd.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年到2016年1000部最流行的电影数据,我们想知道这些电影数据中评分的平均分,导演的人数等信息,我们应该怎么获取?
练习2:对于这一组电影数据,如果我们想rating,runtime的分布情况,应该如何呈现数据?
#统计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()
结果展示: