0104-【课程实战】-Python数据分析炒菜-第7章-切配菜品——数值操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leadingsci/article/details/89301952


7.1 数值替换

7.1.1 一对一替换

df = pd.read_csv(r"C:\Users\leadi\Python\01.python\input\train-pivot.csv",encoding="gbk")
df

在这里插入图片描述
对某一列的值进行替换

df["用户ID"].replace(2459,2500)

在这里插入图片描述
对整表进行替换

df.replace(np.NaN,0)

7.1.2 多对一替换

不是一个单元,没有变化,要以单元格为单位

df.replace(["A","B"],0)

在这里插入图片描述

df.replace(["A类","B类"],0)

在这里插入图片描述

7.1.3 多对多替换

df.replace({"A类":"a","B类":"b"})

在这里插入图片描述


7.2 数值排序

7.2.1 按照一列数值进行排序

df.sort_values(by=[“列名”],ascending = False),默认为True为升序,False为降序

df.sort_values(by = ["用户ID"])

在这里插入图片描述

df.sort_values(by = ["用户ID"],ascending = False)

在这里插入图片描述

7.2.2 按照缺失值的列进行排序

na_position参数,默认“last”将缺失值现在在最后,设置为“first”为最前面

df.sort_values(by = ["用户ID"],na_position = "first")

在这里插入图片描述

7.2.3 按照多列数值进行排序

df.sort_values(by = ["用户ID","客户分类"],ascending = [True,False])

在这里插入图片描述


7.3 数值排名

rank(method = "average",ascending = True)

method有:

  • averge —— 如出现重复值,则两个按为排名的平均值
  • first ——按列中先出现的顺序排名
  • min —— 如出现重复值,则两个按最小的排名
  • max —— 与上相反
df["用户ID"].rank(method = "average")

在这里插入图片描述


7.4 数值删除

7.4.1 删除列

df.drop(["客户分类","7月销量"],axis = 1)

在这里插入图片描述

7.4.2 删除行

df.drop([2,3],axis = 0)

在这里插入图片描述

重置索引

df2 = df.drop([2,3],axis = 0)
df2.reset_index(drop = True)

在这里插入图片描述

通过index删除行

df.drop(index = [2,3],axis = 0)
# or
df.drop(df.index[[2,3]],axis = 0)

在这里插入图片描述

7.4.3 删除特定行

条件筛选

df[df["7月销量"] > 10 ]

在这里插入图片描述


7.5 数值计算

计算某些值出现的次数

出现值的占比

df["7月销量"].value_counts(normalize = True)

在这里插入图片描述

# sort升序
df["7月销量"].value_counts(normalize = True,sort = True)

在这里插入图片描述


7.6 唯一值获取

df["7月销量"].unique()

# 输出
array([ 6, 37,  8,  7,  9], dtype=int64)

7.7 数值查找

df["7月销量"].isin([6,7])

输出
0     True
1    False
2    False
3     True
4    False
Name: 7月销量, dtype: bool

7.8 区间划分

pd.cut

pd.cut(df["7月销量"],3)

输出,自动切割
0    (5.969, 16.333]
1     (26.667, 37.0]
2    (5.969, 16.333]
3    (5.969, 16.333]
4    (5.969, 16.333]
Name: 7月销量, dtype: category
Categories (3, interval[float64]): [(5.969, 16.333] < (16.333, 26.667] < (26.667, 37.0]]

标记

pd.cut(df["7月销量"],3,labels=["bad", "medium", "good"])

#输出
0     bad
1    good
2     bad
3     bad
4     bad
Name: 7月销量, dtype: category
Categories (3, object): [bad < medium < good]

7.9 插入新的行或列

插入行,使用拼接的方法

插入列,使用
insert(指定插入位置,“列名”,列表)

df.insert(2,"产量",["a","b","c","d","e"])
df

在这里插入图片描述

或者,只能放在最后一列,不能指定位置

df["产量2"]= ["a","b","c","d","e"]
df

在这里插入图片描述


7. 10 行列互换

df.T

在这里插入图片描述

再次转换

df.T.T

在这里插入图片描述


7.11 索引重塑

将原来的索引进行重新构造

df.set_index("用户ID")

在这里插入图片描述

根据索引展开,转换为树形结构

df.stack()

输出

用户ID    59224
   客户分类       A类
   区域       一线城市
   是否省会        是
   7月销量        6
   8月销量       20
   9月销量        0
1  用户ID    55295
   客户分类       B类
   区域       三线城市
   是否省会        否
   7月销量       37
   8月销量       27
   9月销量       35
2  用户ID    46035
   客户分类       A类
   区域       二线城市
   是否省会        是
   7月销量        8
   8月销量        1
   9月销量        8
3  用户ID     2459
   客户分类       C类
   区域       一线城市
   是否省会        是
   7月销量        7
   8月销量        8
   9月销量       14
4  用户ID    22179
   客户分类       B类
   区域       三线城市
   是否省会        否
   7月销量        9
   8月销量       12
   9月销量        4
dtype: object

关闭,转换为表格结构

df.set_index("用户ID")
df.stack().unstack()

在这里插入图片描述


7.12 长宽表转换

7.12.1 宽表转为长表

  • stack() 转树形数据,保持索引不变的前提下,将列索引也变为行索引
  • melt()
df.set_index(["用户ID","客户分类"])

在这里插入图片描述

df.set_index(["用户ID","客户分类"])
df.stack()

输出

0  用户ID    59224
   客户分类       A类
   区域       一线城市
   是否省会        是
   7月销量        6
   8月销量       20
   9月销量        0
1  用户ID    55295
   客户分类       B类
   区域       三线城市
   是否省会        否
   7月销量       37
   8月销量       27
   9月销量       35
2  用户ID    46035
   客户分类       A类
   区域       二线城市
   是否省会        是
   7月销量        8
   8月销量        1
   9月销量        8
3  用户ID     2459
   客户分类       C类
   区域       一线城市
   是否省会        是
   7月销量        7
   8月销量        8
   9月销量       14
4  用户ID    22179
   客户分类       B类
   区域       三线城市
   是否省会        否
   7月销量        9
   8月销量       12
   9月销量        4
dtype: object

melt()

df.set_index(["用户ID","客户分类"])
df.melt(id_vars = ["用户ID","客户分类"])

在这里插入图片描述

最后,两列没有列名

df.set_index(["用户ID","客户分类"])
df.melt(id_vars = ["用户ID","客户分类"],var_name = "区域",value_name = "是否省会")

在这里插入图片描述
结果只有四列,只是改了列名。不实用。

7.12.2 长列表转换为宽列表

使用数据透视表


7.13 apply()与applymap()函数

  • map() 对一个序列中的所有元素,执行相同的函数操作;

使用在DataFrame中,需要匿名函数搭配使用。

  • apply(),对某一列或行的元素执行相同的函数操作;
  • applymap() 对整个DataFrame每个元素执行相同的函数操作;

map

def sq(x):
    return x**2

list1 = map(sq,[1,2,3])
for i in list1:
    print(i)

输出
1
4
9

or

list1 = map(lambda x:x**2,[1,2,3])
for i in list1:
    print(i)
# 两个列表
list1 = map(lambda x,y :x + y,[1,2,3],[4,5,6])
for i in list1:
    print(i)
 
 输出
 5
7
9

apply()

df["7月销量"].apply(lambda x :x +10)

0    16
1    47
2    18
3    17
4    19
Name: 7月销量, dtype: int64

applymap()

# 直接相加,报错,有些列是字符串
df.applymap(lambda x :x +10)
# 删除列
df2 = df.drop(["客户分类","区域","是否省会"],axis = 1)
df2.applymap(lambda x :x +10)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/leadingsci/article/details/89301952