文章目录
1. pandas的创建 和 一维数组 Series 的学习
为什么要用pandas?
numpy 虽然有强大的功能 , 但是只能处理数值数据 而 pandas 就很好的解决了这个问题
pandas 一维 Serier 类似于 C++ 中的 map 和 python 中的 字典 , 我的理解就是键值对映射 , 也就是加上了一个维度的标签
如何构建一个 Series
- 用函数 传入 值 和 键 , 这里的值和键都可以是可迭代对象
- 传入一个字典
跟 numpy 特别像 , numpy 也可以用这两种方法
import pandas as pd
def printf(t):
print(t)
print("-" * 70)
t = pd.Series(range(10) , index = range(10))
printf(t)
book = {"李华" : "女" , "李明" : "男" , "张三" : "男"}
t = pd.Series(book)
printf(t)
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
dtype: int64
----------------------------------------------------------------------
李华 女
李明 男
张三 男
dtype: object
----------------------------------------------------------------------
2.Series 的索引和切片
# 1. 索引
# 根据键来找
printf(t[0])
printf(t['李华'])
# 根据值来找
printf(t[t == '男'])
# 2.切片
printf(t[:1])
printf(t[[0]])
女
----------------------------------------------------------------------
女
----------------------------------------------------------------------
李明 男
张三 男
dtype: object
----------------------------------------------------------------------
李华 女
dtype: object
----------------------------------------------------------------------
李华 女
dtype: object
----------------------------------------------------------------------
3.用index 和 value 单独处理键或者值
printf(t.values)
printf(t.index)
l1 = list(t.index)
printf(l1)
for i in l1:
print(i)
['女' '男' '男']
----------------------------------------------------------------------
Index(['李华', '李明', '张三'], dtype='object')
----------------------------------------------------------------------
['李华', '李明', '张三']
----------------------------------------------------------------------
李华
李明
张三
4.DateFrame 的创建
DaTaFrame 就是一个二维的组,就是给Series 再加一维 , 现在每个数据不仅有行标 index 还有 列标 columns
#pandas 的创建
import pandas as pd
import numpy as np
def printf(t):
print(t)
print("-" * 70)
#DateFrame 的创建
# 1. 用函数
tt = pd.DataFrame(np.arange(0,12).reshape(3,4) , index = ["第{}行".format(i+1) for i in range(3)] , columns = ["第一列" , "第二列" , "第三列" , "第四列"])
printf(tt)
# 2. 用字典
book = [
{"name" : "lihua" , "score" : "120" , "age" : "17"} ,
{"name" : "lilei" , "score" : "100" , "age" : "16"} ,
{"name" : "lihao" , "score" : "130" , "age" : "18"}
]
# 注意是在列表中放入多个字典传入列表进去 , 而不是传入一个大字典进去
tt = pd.DataFrame(book)
printf(tt)
第一列 第二列 第三列 第四列
第1行 0 1 2 3
第2行 4 5 6 7
第3行 8 9 10 11
----------------------------------------------------------------------
name score age
0 lihua 120 17
1 lilei 100 16
2 lihao 130 18
----------------------------------------------------------------------
5.pandas 的属性
import pandas as pd
# import numpy as np
def printf(t):
print(t)
print("-" * 70)
# 2. 用字典
book = [
{"name" : "lihua" , "score" : "120" , "age" : "17"} ,
{"name" : "lilei" , "score" : "100" , "age" : "16"} ,
{"name" : "lihao" , "score" : "130" , "age" : "18"}
]
tt = pd.DataFrame(book)
printf(tt)
#shape 查看行列
print("shape 查看行列")
printf(tt.shape)
# dtype 列数据类型 object 是指混合数据类型
print("dtype 列数据类型 object 是指混合数据类型")
printf(tt.dtypes)
# ndim 数据维度
print("ndim 数据维度")
printf(tt.ndim)
# 列索引
print("列索引")
printf(tt.columns)
# 行索引
print("行索引")
printf(tt.index)
# 对象值
print("对象值")
printf(tt.values)
# 头部 n 行
print("头部 n 行")
printf(tt.head(2))
# 尾部 n 行
print("尾部 n 行")
printf(tt.tail(2))
# 相关信息
print("相关信息")
printf(tt.info())
# 数据统计
print("数据统计")
printf(tt.describe())
name score age
0 lihua 120 17
1 lilei 100 16
2 lihao 130 18
----------------------------------------------------------------------
shape 查看行列
(3, 3)
----------------------------------------------------------------------
dtype 列数据类型 object 是指混合数据类型
name object
score object
age object
dtype: object
----------------------------------------------------------------------
ndim 数据维度
2
----------------------------------------------------------------------
列索引
Index(['name', 'score', 'age'], dtype='object')
----------------------------------------------------------------------
行索引
RangeIndex(start=0, stop=3, step=1)
----------------------------------------------------------------------
对象值
[['lihua' '120' '17']
['lilei' '100' '16']
['lihao' '130' '18']]
----------------------------------------------------------------------
头部 n 行
name score age
0 lihua 120 17
1 lilei 100 16
----------------------------------------------------------------------
尾部 n 行
name score age
1 lilei 100 16
2 lihao 130 18
----------------------------------------------------------------------
相关信息
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 3 non-null object
1 score 3 non-null object
2 age 3 non-null object
dtypes: object(3)
memory usage: 200.0+ bytes
None
----------------------------------------------------------------------
数据统计
name score age
count 3 3 3
unique 3 3 3
top lihua 120 17
freq 1 1 1
----------------------------------------------------------------------
6.统计任务:狗狗名字计数 , 并输出前十个
#狗狗名字计数 , 并输出前十个
import pandas as pd
# import numpy as np
def printf(t):
print(t)
print("-" * 70)
path = "F:\All date\dogNames2.csv"
#用 pandas 读取 csv 文件
date = pd.read_csv(path)
#排序 , 降序
date = date.sort_values(by = "Count_AnimalName" , ascending = False)
# 查看前十个
print(date.head(10))
Row_Labels Count_AnimalName
1156 BELLA 1195
9140 MAX 1153
2660 CHARLIE 856
3251 COCO 852
12368 ROCKY 823
8417 LOLA 795
8552 LUCKY 723
8560 LUCY 710
2032 BUDDY 677
3641 DAISY 649
7.pandas 的 切片和索引
"""
date.loc 标签索引
date.iloc 位置索引
"""
# pandas 的 切片和索引
import pandas as pd
import numpy as np
# import numpy as np
def printf(t):
print(t)
print("-" * 70)
date = pd.DataFrame(np.array(range(12)).reshape(3,4) , index = list("ABC") , columns = list("DEFG"))
printf(date)
#连续的 前闭后闭
printf(date.loc[ 'A' : 'B' , 'F' : 'G'])
#不连续的 且按顺序取
printf(date.loc[ ['A' , 'B'] , ['F' , 'D']])
#连续的 前闭后开
printf(date.iloc[ 0 : 2 , 2 : 4])
#不连续的 且按顺序取
printf(date.iloc[ [0 , 1] , [2 , 0]])
D E F G
A 0 1 2 3
B 4 5 6 7
C 8 9 10 11
----------------------------------------------------------------------
F G
A 2 3
B 6 7
----------------------------------------------------------------------
F D
A 2 0
B 6 4
----------------------------------------------------------------------
F G
A 2 3
B 6 7
----------------------------------------------------------------------
F D
A 2 0
B 6 4
----------------------------------------------------------------------
8.pandas 的bool 索引
# pandas 的bool 索引
# pandas 的 切片和索引
import pandas as pd
import numpy as np
# import numpy as np
def printf(t):
print(t)
print("-" * 70)
date = pd.DataFrame(np.array(range(12)).reshape(3,4) , index = list("ABC") , columns = list("DEFG"))
printf(date)
##选择符合条件的行
printf(date[(date['E'] >= 2) & (date['F'] <= 9)])
#对字符串进行条件选择
book = [{"name":"lihua","age":"17","high":"170"},{"name":"lilei","age":"18","high":"180"},{"name":"liufang","age":"18","high":"175"}]
date = pd.DataFrame(book)
printf(date[date["name"].str.len() > 6])
D E F G
A 0 1 2 3
B 4 5 6 7
C 8 9 10 11
----------------------------------------------------------------------
D E F G
B 4 5 6 7
----------------------------------------------------------------------
name age high
2 liufang 18 175
----------------------------------------------------------------------
9.pandas 缺失数据的处理:
# pandas 缺失数据的处理
import pandas as pd
import numpy as np
#解决
pd.set_option('mode.chained_assignment', None)
# import numpy as np
def printf(t):
print(t)
print("-" * 70)
def solve(t):
#先处理 值为 0 的元素 0 的元素也会计算到平均值中
# printf(date)
# printf(t.fillna(t.mean()))
for i in date.columns:
date[i][date[i] == 0] = np.nan
#用列平均值去掉 替换 nan
return t.fillna(t.mean())
date = pd.DataFrame(np.array(range(12)).reshape(3,4) , index = list("ABC") , columns = list("DEFG"))
date['E']['C'] = np.nan
date['G']['B'] = np.nan
date['D']['A'] = np.nan
date['G']['C'] = 0
printf(date)
#判断一个数据是否有 nan
printf(pd.isnull(date))
printf(pd.notnull(date))
#删除有nan的元素
# axis 选择维度 , how 删除条件 all 代表所有都是 nan 才删除
printf(date.dropna(axis = 0 , how = "all" ))
printf(date.dropna(axis = 1 , how = "any" ))
printf(solve(date))
# printf(date)
D E F G
A NaN 1.0 2 3.0
B 4.0 5.0 6 NaN
C 8.0 NaN 10 0.0
----------------------------------------------------------------------
D E F G
A True False False False
B False False False True
C False True False False
----------------------------------------------------------------------
D E F G
A False True True True
B True True True False
C True False True True
----------------------------------------------------------------------
D E F G
A NaN 1.0 2 3.0
B 4.0 5.0 6 NaN
C 8.0 NaN 10 0.0
----------------------------------------------------------------------
F
A 2
B 6
C 10
----------------------------------------------------------------------
D E F G
A 6.0 1.0 2 3.0
B 4.0 5.0 6 3.0
C 8.0 3.0 10 3.0
----------------------------------------------------------------------