Pandas 学习笔记(一)
数据类型
Series 一维,带标签数组(index)
DataFrame 二维,Series容器
Series
创建Series
import pandas as pd
import numpy as np
import string
t1 = pd.Series(np.arange(10),index = list(string.ascii_uppercase[:10]))
print(t1)
#结果
A 0
B 1
C 2
D 3
E 4
F 5
G 6
H 7
I 8
J 9
dtype: int32
#指定Index
t3 = pd.Series([1,2,3,4,5,6],index = ["a","b","c","d","e","f"])
#利用字典创建Series
temp_dict = {"name":"jack","age":30,"data":"2020-1-3"}
t4 = pd.Series(temp_dict)
Series切片和索引
切片:直接传入start end 或者步长即可
索引:选取一个的时候传入序号或者Index,多个的时候传入序号或index的列表
#切片
print(t1[1:7:2])
#选取单个
print(t1[2])
print(t1["F"])
#选取多个
print(t1[1:3])
print(t1[[1,4,5]])
print(t1[["A","B","D"]])
#按条件选取
print(t1[t1>4])
ndarray 的很多方法可以应用在Series中如argmax,clip等
DataFrame
DataFrame对象既有行索引,又有列索引
行索引,表明不同行,横向索引,叫index,0轴,axis=0
列索引,表名不同列,纵向索引,叫columns,1轴,axis=1
读取数据
读取csv
pd.read_csv()
从mysql中读取
pd.read_sql(sql_sentence,connection)
从mongodb中
数据的基本信息
dog_name = pd.read_csv(r"dogNames2.csv")
#行数列数
print(dog_name.shape)
#列数据类型
print(dog_name.dtypes)
#数据维度
print(dog_name.ndim)
#行索引
print(dog_name.index)
#列索引
print(dog_name.columns)
#对象值,返回二维ndarray数组
print(dog_name.values)
#返回头部3行
print(dog_name.head(3))
#返回尾部几行
print(dog_name.tail(3))
#相关信息概览
print(dog_name.info())
#快速综合统计结果:计数、均值、最小值、最大值、四分位数、标准差
#只计算Int float的信息
print(dog_name.describe())
print(dog_name["Count_AnimalName"].describe())
DataFrame操作
排序
#ascending 默认为True升序排列,False降序排列
dog_name = dog_name.sort_values(by = "Count_AnimalName",ascending=False)
选取数据
#方括号例写数字表示选取行
#方括号里写数字代表选取列
print(dog_name[:20])
print("***********")
print(dog_name["Row_Labels"])
print("***********")
print(dog_name[:20]["Row_Labels"])
#选择多列
print(t1[1:3][["w","x","y","z"]])
#.loc()通过标签索引数据
print(t1.loc["a","w"])
print(t1.loc["a",["w","z"]])
print(t1.loc["b":,["w","z"]])
#在loc中冒号是闭合的
print(t1.loc["a":"c",["w","z"]])
w z
a 0 3
b 4 7
c 8 11
#.iloc通过位置索引数据
#.iloc中的冒号左开右闭
print(t1.iloc[0:2,1:4])
#可以通过列的位置改变返回的DateFrame中列的位置
print(t1.iloc[0:2,[1,0]])
x w
a 1 0
b 5 4
布尔索引
print(dog_name[dog_name["Count_AnimalName"]>50])
#多个条件不同条件之间需要用括号括起来
print(dog_name[(dog_name["Count_AnimalName"]>50)&(dog_name["Count_AnimalName"]<100)])
#找到所有的使用次数超过700并且名字的字符串的长度大于4的狗的名字
dog_name[(dog_name["Row_Labels"].str.len()>4)&(dog_name["Count_AnimalName"]>80)]
#将字符串转化为小写
print(dog_name["Row_Labels"].str.lower())
print(dog_name["Row_Labels"].str.upper())
#得到各元素第i的字符
print(dog_name["Row_Labels"].str.get(0))
得到唯一值的个数
len(set(t2["director"].tolist()))
len(t2["director"].unique())
NAN的处理
判断NAN
t2.iloc[2,3] = np.nan
print(t2)
print(pd.isnull(t2))
print(pd.notnull(t2))
print(t2[pd.notnull(t2["z"])])
#结果
w x y z
a 0 1 2 3.0
b 4 5 6 7.0
c 8 9 10 NaN
w x y z
a False False False False
b False False False False
c False False False True
w x y z
a True True True True
b True True True True
c True True True False
w x y z
a 0 1 2 3.0
b 4 5 6 7.0
处理NAN
处理方式1:删除NaN所在的行列dropna (axis=0, how=‘any’, inplace=False)
#axis = 0对行
#inplace = True 原地修改
print(t2.dropna(axis = 0,how = "all",inplace = True))
#axis = 1对列
print(t2.dropna(axis = 1,how = "all"))
#how = "any" 存在NNA就去除
print(t2.dropna(axis = 0,how = "any"))
#how = "all" 删除全为NAN的
print(t2.dropna(axis = 1,how = "any"))
#结果
w x y z
a 0 1 2 3.0
b 4 5 6 7.0
c 8 9 10 NaN
w x y z
a 0 1 2 3.0
b 4 5 6 7.0
c 8 9 10 NaN
w x y z
a 0 1 2 3.0
b 4 5 6 7.0
w x y
a 0 1 2
b 4 5 6
c 8 9 10
处理方式2:填充数据,t.fillna(t.mean()),t.fiallna(t.median()),t.fillna(0)
#.fillna()
#t.mean()\t.median()
print(t2.fillna(t2.mean(),inplace= True))
#只填充一列
t2["z"] = t2["z"].fillna(t2["z"].mean())