6. 数据分箱与离散化

方法/操作语法示例描述
等宽分箱pd.cut(df[‘col’], bins=3)将数值列分为等宽区间(如分为低/中/高)
等频分箱pd.qcut(df[‘col’], q=4)将数值列分为等频区间(每箱数据量相同)

cut()

pandas.cut()用于将连续数据(如数值型数据)分割成离散的区间。可以使用cut()来将数据划分为不同的类别或范围,通常用于数据的分箱处理。

cut()部分参数说明:

参数说明
x要分箱的数组或Series,通常是数值型数据。
bins切分区间的数值列表或者整数。如果是整数,则表示将数据均匀地分成多少个区间。如果是列表,则需要指定每个区间的边界。
right默认True,表示每个区间的右端点是闭区间,即包含右端点。如果设置为False,则左端点为闭区间。
labels传入一个列表指定每个区间的标签。
df = pd.read_csv("data/employees.csv")# 加载员工数据


df1 = df.iloc[:10]
print(df1["salary"])

salary = pd.cut(df.iloc[9:16]["salary"], 3)
print(salary)

salary = pd.cut(df1["salary"], [0, 10000, 20000])
print(salary)

df['salary_level'] = pd.cut(df["salary"], bins=3, labels=["low", "medium", "high"])
print(df['salary_level'])

df['salary_level'] = pd.cut(df["salary"], bins=[0, 10000, 20000,300000], labels=["low", "medium", "high"])
print(df['salary_level'])


df = pd.read_csv("data/employees.csv")# 加载员工数据
salary = pd.cut(df["salary"], 3)
print(salary.value_counts())
salary2 = pd.qcut(df["salary"], 3)
print(salary2.value_counts())

#睡眠数据分箱
df_sleep = pd.read_csv("data/sleep.csv")

# 将睡眠质量分为3组:差(0-4)、中(4-7)、好(7-10)
bins = [0, 4, 7, 10]
labels = ['差', '中', '好']

df_sleep['quality_level'] = pd.cut(
    df_sleep['sleep_quality'],
    bins=bins,
    labels=labels
)
print(df_sleep[ 'quality_level'])
print(df_sleep[ 'quality_level'].value_counts())

7.  其他常用转换

  • df.rename(columns={“score”: “成绩”})
  • df.set_index(“name”)
  • df.reset_index()
df = pd.DataFrame({"age": [20, 30, 40, 10], "name": ["张三", "李四", "王五", "赵六"], "id": [101, 102, 103, 104]})
print(df)
#    age name   id
# 0   20   张三  101
# 1   30   李四  102
# 2   40   王五  103
# 3   10   赵六  104
#通过set_index()设置行索引
# inplace=True:这是一个布尔类型的参数。当设为 True 时,会直接在原 
# DataFrame上进行修改;若设为 False(默认值),则会返回一个新的 
# DataFrame,原DataFrame 保持不变
df.set_index("id", inplace=True)  # 设置行索引
print(df)
df.reset_index(inplace=True)  # 重置索引
print(df)
#修改行索引名和列名  个别修改
df.rename(index={101: "一", 102: "二", 103: "三", 104: "四"}, columns={"age": "年龄", "name": "姓名"}, inplace=True)
print(df)
#重新赋值  批量修改
df.index = ["Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ"]
df.columns = ["年齡", "名稱"]
#添加列
通过 df[“列名”] 添加列。
df["phone"] = ["13333333333", "14444444444", "15555555555", "16666666666"]
#删除列
# 通过 df.drop(“列名”, axis=1) 删除,也可是删除行 axis=0
df.drop("phone", axis=1, inplace=True)  # 删除phone,按列删除,inplace=True表示直接在原对象上修改
print(df)
#通过 del df[“列名”] 删除
del df["phone"]
print(df)
#插入列 通过 insert(loc, column, value) 插入。该方法没有inplace参数,直接在原数据上修改。
df.insert(loc=0, column="phone", v
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容