数据分析 第四周 (pandas 一维 series 和 二维 DaTaFrame)笔记

1. pandas的创建 和 一维数组 Series 的学习

为什么要用pandas?

numpy 虽然有强大的功能 , 但是只能处理数值数据 而 pandas 就很好的解决了这个问题

pandas 一维 Serier 类似于 C++ 中的 map 和 python 中的 字典 , 我的理解就是键值对映射 , 也就是加上了一个维度的标签

如何构建一个 Series

  1. 用函数 传入 值 和 键 , 这里的值和键都可以是可迭代对象
  2. 传入一个字典

跟 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)
     第一列  第二列  第三列  第四列
第10    1    2    324    5    6    738    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
----------------------------------------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天都想发疯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值