栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Python数据分析】pandas知识总结

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Python数据分析】pandas知识总结

文章目录
      • Series
        • 初始化创建
        • 通过字典创建
        • 索引
        • 数据对齐
      • Dataframe
        • 通过字典创建
        • 初始化创建
        • 索引
          • 获取列值
          • 获取行值
          • 特别注意
        • 数据对齐
        • 删除`nan`值
        • 排序
        • 常用函数

Series

创建一维数据表

初始化创建
# 可以指定索引index
sr1 = pd.Series(np.arange(10), index=list(string.ascii_uppercase[:10]))
print(sr1)
# A    0
# B    1
# C    2
# D    3
# E    4
# F    5
# G    6
# H    7
# I    8
# J    9
# dtype: int32

# 可以不指定索引 index 默认以0开始作为索引
sr2 = pd.Series(np.arange(10))
print(sr2)
# 0    0
# 1    1
# 2    2
# 3    3
# 4    4
# 5    5
# 6    6
# 7    7
# 8    8
# 9    9
# dtype: int32
通过字典创建
d = {"name": "zdz", "age": 13, "tel": "10000"}
sr1 = pd.Series(d)
print(sr1)
# name      zdz
# age        13
# tel     10000
# dtype: object
索引

索引方式和之前的np中索引一样,可以数值索引,也可以直接按照字典的方式索引(sr[key])来获取某行的值

index属性用于获取所有的行索引值

使用iloc和loc两种方式进行索引,其中iloc是以行序号作为索引,而loc则是以行标签作为索引。

s = pd.Series(np.arange(10))
print(s)
print(s[0])  # 0  获取第0行
print(s[[1, 2, 3]])  # 获取第1 2 3行
# 1    1
# 2    2
# 3    3

sr1 = pd.Series(np.arange(10), index=list(string.ascii_uppercase[:10]))
print(sr1.index)  # 获取行索引
# Index(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'], dtype='object')

sr = pd.Series(np.arange(20))
sr2 = sr[10:]
print(sr2[10])  # sr2里面的索引代表的是标签值 key  不能表示sr2中元素的序号

# 要想用整数作为标签 则使用iloc 和 loc函数来作为区分
# # loc[key]里面的数字解释为key 也就是标签值
print(sr2.loc[10])  # 10
# print(sr2.loc[0])  # 报错
# 使用切片操作切出标签 前包后包
print(sr2.loc[10:13])  # 10 11 12 13

# iloc[idx]里面的数字解释为索引值  也就是元素序号
print(sr2.iloc[9])  # 19
print(sr2.iloc[0])  # 10
# 同样可以进行切片操作 切出前4行  前包后不包
print(sr2.iloc[0:4])
数据对齐

通过相加操作可以将两个索引不按顺序对应的数组对齐。它会自动选择相同索引处的值相加。

sr1 = pd.Series([12, 23, 34], index=['c', 'a', 'd'])
sr2 = pd.Series([1, 2, 3], index=['d', 'c', 'a'])
sr = sr1 + sr2
print(sr)
# a    26
# c    14
# d    35
# dtype: int64

sr3 = pd.Series([1, 2, 3, 4], index=['d', 'c', 'a', 'b'])
sr = sr1 + sr3
print(sr)
# a    26.0
# b     NaN
# c    14.0
# d    35.0
# dtype: float64
# 一个里面有  另一个里面没有  就设置为nan
# 使用函数 add sub div mul fill_value = 0 用0补齐
sr = sr1.add(sr3)  # 效果同上
print(sr)
# a    26.0
# b     NaN
# c    14.0
# d    35.0
# dtype: float64
sr = sr1.add(sr3, fill_value=0)
print(sr)
# a    26.0
# b     4.0
# c    14.0
# d    35.0
Dataframe

创建二维数据表

Dataframe是Series的容器

通过字典创建

创建多维数组可以先指定列名,每个列下面可以用数组添加数据。

a = pd.Dataframe({'a': [1, 2, 3, 4], 'b': [5, 6, 7, 8]})
print(a)  # 指定列名 字典为基础创建
#    a  b
# 0  1  5
# 1  2  6
# 2  3  7
# 3  4  8
初始化创建

可以同时指定行列名,若不指定,默认为从0开始的数字作为行列名。

t = pd.Dataframe(np.arange(12).reshape(3, 4), index=list("abc"), columns=list("ABCD"))
# index 指定行索引 columns指定列索引
print(t)
#    A  B   C   D
# a  0  1   2   3
# b  4  5   6   7
# c  8  9  10  11
t = pd.Dataframe(np.arange(12).reshape(3, 4))
print(t)
#    0  1   2   3
# 0  0  1   2   3
# 1  4  5   6   7
# 2  8  9  10  11
索引

直接以[]的方式进行索引获得的是列数据

iloc通过序号来索引行列数据

loc通过标签来索引行列数据

获取列值
print(t['A'])  # 获取A列数据
# a    0
# b    4
# c    8
# Name: A, dtype: int32
print(type(t['A'])) # 

print(t.loc[:, 'A']) # 获取A列数据
# a    0
# b    4
# c    8
# Name: A, dtype: int32

print(t.iloc[:, 1])  # 1列数据
# a    1
# b    5
# c    9
# Name: B, dtype: int32
获取行值
print(t.loc['a'])  # 获取'a'行数据
print(t.loc['a'][1])  # 1 获取a行1列的数据 只能这样获取 第二维可以使数字索引
print(t.loc['a']['B'])  # 1 可以这样获取B列的数据
# print(t.loc['a', 1]) # 报错
print(t.loc['a', 'B'])  # 1 获取a行1列的数据 第二维必须是列索引标签 不能是数字序号索引
print(t.loc['a'])  # 获取'a'行数据
print(type(t.loc['a'])) # 

print(t.loc['a', :])  # 同上
print(type(t.loc['a', :]))  # 同上

print(t.loc['a':'c'])  # 获取a-c行数据
#    A  B   C   D
# a  0  1   2   3
# b  4  5   6   7
# c  8  9  10  11
print(type(t.loc['a':'c']))  # 

print(t.loc['a':'c', 'A':'C'])  # 获取a~c行 A~C列
#    A  B   C
# a  0  1   2
# b  4  5   6
# c  8  9  10

print(t.loc[['a', 'c'], ['A', 'C']])  # 获取a c行 A C列
#    A   C
# a  0   2
# c  8  10

print(t.loc['a'][1])  # 1 获取a行1列的数据 只能这样获取 第二维可以使用数字索引
print(t.loc['a']['B'])  # 1 可以这样获取B列的数据
# print(t.loc['a', 1]) # 报错
print(t.loc['a', 'B'])  # 1 获取a行1列的数据 第二维必须是列索引标签 不能是数字

# 通过数字索引获取行数据 iloc === integer location
print(t.iloc[0])  # 等价于t.loc['a']
# A    0
# B    1
# C    2
# D    3
# Name: a, dtype: int32

print(t.iloc[0, 1])  # 1 0行1列数据

print(t.iloc[0, :])  # 0行数据
# A    0
# B    1
# C    2
# D    3

特别注意

通过列表获取的和直接通过行索引获取的得到的数据类型不一样。

print(t.loc['a'])
print(type(t.loc['a']))
# A    0
# B    1
# C    2
# D    3
# Name: a, dtype: int32
# 

print(t.loc[['a']])
print(type(t.loc[['a']]))
#    A  B  C  D
# a  0  1  2  3
# 
数据对齐
df1 = pd.Dataframe({'x': [1, 2, 3, 4], 'y': [5, 6, 7, 8]}, index=['a', 'b', 'c', 'd'])
df2 = pd.Dataframe({'x': [0, 0, 1, 1], 'y': [2, 2, 3, 3]}, index=['a', 'b', 'c', 'd'])
df = df1 + df2  # 此处也可以使用add、mul、sub、div等函数 fill_value = 0 即可填充nan值为0
print(df1)
print(df2)
print(df)
#    x   y
# a  1   7
# b  2   8
# c  4  10
# d  5  11
df1.loc['d', 'y'] = np.nan
df1.loc['d', 'x'] = np.nan
#      x     y
# a  1.0   7.0
# b  2.0   8.0
# c  4.0  10.0
# d  NaN   NaN
删除nan值
print(df3.dropna(how="any", axis=0))
# 默认how = any  axis=0 以行为依据
#      x    y
# a  1.0  7.0
# b  2.0  8.0

print(df3.dropna(how='all'))
# 列属性全为nan才会删除那一行
#      x     y
# a  1.0   7.0
# b  2.0   8.0
# c  NaN  10.0

print(df3.dropna(how="all", axis=1))
#      x     y
# a  1.0   7.0
# b  2.0   8.0
# c  NaN  10.0
# d  NaN   NaN

print(df3.dropna(axis=0, how="all").dropna(axis=1))
#       y
# a   7.0
# b   8.0
# c  10.0
排序
ac = df.sort_values(ascending=True, by='x')  # 按照列排序  行为轴
print(ac)
#    x   y
# a  1   7
# b  2   8
# c  4  10
# d  5  11
ar = df.sort_values(ascending=False, by='a', axis=1)  # 按照行排序 按照a这一行进行排序 列为轴
print(ar)
#     y  x
# a   7  1
# b   8  2
# c  10  4
# d  11  5
ai = df.sort_index(ascending=False)  # 按照行索引排序
print(ai)
#    x   y
# d  5  11
# c  4  10
# b  2   8
# a  1   7

ai = df.sort_index(ascending=False, axis=1) # 按照列索引排序
print(ai)
#     y  x
# a   7  1
# b   8  2
# c  10  4
# d  11  5
常用函数

注意轴axis的作用

print(df3.mean(axis=1))  # 行不变列变  说明求的是每一行的平均值
print(df3.mean(axis=0))  # 默认 列不变行变  说明求的是每一列的平均值  忽略nan值
print(df3.sum())
print(df3.sum(axis=1))  # nan视为0
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/283547.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号