版权声明:本文为博主原创文章,未经博主允许不得转载。 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)