python中的pandas用法大全

本文详细介绍如何使用Pandas进行数据生成、数据清洗、预处理、提取、筛选、汇总及输出等操作,涵盖数据表创建、读写、信息查看、空值处理、数据格式转换、数据表合并、数据提取与筛选、数据汇总等核心内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import numpy as np
import pandas as pd


# 一:生成数据表
# 1. 用pandas创建数据表
df3 = pd.DataFrame({"id": [1001, 1002, 1003, 1004, 1005, 1006],
                    "date": pd.date_range("20200425", periods=6),
                    "city": ['Beijing ', 'SH', ' guangzhou ', 'Shenzhen', 'shanghai', 'BEIJING '],
                    "age": [23, 44, 54, 32, 34, 32],
                    "category": ['100-A', '100-B', '110-A', '110-C', '210-A', '130-F'],
                    "price": [1200, np.nan, 2133, 5433, np.nan, 4432]},
                    columns=['id', 'date', 'city', 'category', 'age', 'price'])

# 2. 将数据表写入到csv文件中
df3.to_csv("csv_data.csv", index=False)  # index=False表示不写入索引,header=False表示不写入表头

# 3. 导入csv或者xlsx文件
df2 = pd.DataFrame(pd.read_excel("xlsx_data.xlsx"))
df = pd.DataFrame(pd.read_csv("csv_data.csv"))  # index_col=1表示从第一列读取,不包含索引


# 二:数据表信息查看
# 1. 数据表维度查看
print(df.shape)

# 2. 数据表基本信息(维度、列名称、数据格式、所占空间等)
print(df.info())

# 3. 每一列数据的格式
print(df.dtypes)

# 4. 某一列的格式
print(df["price"].dtype)

# 5. 空值
print(df.isnull())

# 6. 查看某一列空值
print(df["price"].isnull())

# 7. 查看某一列的唯一值
print(df["age"].unique())

# 8. 查看数据表的值
print(df.values)

# 9. 查看列名称
print(df.columns)

# 10. 查看前2行数据
print(df.head(2))  # 默认查看前10行数据

# 11. 查看后两行数据
print(df.tail(2))  # 默认查看后10行数据


# 三:数据表清洗
# 1. 用数字0填充空值
df = df.fillna(value=0)

# 2. 使用列price的均值对NA进行填充
df["price"] = df["price"].fillna(df["price"].mean())

# 3. 清除city字段的字符空格
df["city"] = df["city"].map(str.strip)

# 4. 大小写转换
df["city"] = df["city"].str.lower()

# 5. 更改数据格式
print(df["price"].fillna(0).astype("int").dtype)

# 6. 更改列名称
df = df.rename(columns={"category": "category_size"})

# 7. 删除后出现的重复值
print(df["age"].drop_duplicates())

# 8.删除先出现的重复值
print(df["age"].drop_duplicates(keep="last"))

# 9. 数据替换
df["city"] = df["city"].replace("sh", "shanghai")


# 四:数据预处理
df1 = pd.DataFrame({"id": [1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008],
                    "gender": ['male', 'female', 'male', 'female', 'male', 'female', 'male', 'female'],
                    "pay": ['Y', 'N', 'Y', 'Y', 'N', 'Y', 'N', 'Y'],
                    "m-point": [10, 12, 20, 40, 40, 40, 30, 20]
                    })

# 1. 数据表合并
df_inner = pd.merge(df, df1, how="inner")  # 匹配合并,交集
df_left = pd.merge(df, df1, how="left")  # 左外连接
df_right = pd.merge(df, df1, how="right")  # 右外连接
df_outer = pd.merge(df, df1, how="outer")  # 全外连接

# 2. 设置索引列
df_inner = df_inner.set_index("id")

# 3. 按照特定列的值排序
df_inner = df_inner.sort_values(by=["age"])

# 4. 按照索引列排序
df_inner = df_inner.sort_index()

# 5. 如果price列的值>3000,group列显示high,否则显示low
df_inner["group"] = np.where(df_inner["price"] > 3000, "high", "low")

# 6. 对符合多个条件的数据进行分组标记
df_inner["city"] = df_inner["city"].map(str.strip).map(str.lower).replace("sh", "shanghai")
df_inner.loc[(df_inner["city"] == "beijing") & (df_inner["price"] >= 4000), "sign"] = 1

# 7. 对category字段的值依次进行分列,并创建数据表,索引值为df_inner的索引列,列名称为category和size
# 此处用到了元组生成器
df_split = pd.DataFrame((x.split('-') for x in df_inner['category']), index=df_inner.index, columns=['category', 'size'])

# 8. 将完成分裂后的数据表和原df_inner数据表进行匹配
df_inner = pd.merge(df_split, df_inner, left_index=True, right_index=True)


# 五:数据提取
# 主要用到的三个函数:loc,iloc和ix,loc函数按标签值进行提取,iloc按位置进行提取,ix可以同时按标签和位置进行提取
# 1. 按索引提取单行的数值
df_inner = df_inner.set_index("id")
print(df_inner.loc[0])

# 2. 按索引提取区域行数值
print(df_inner.iloc[0:3])

# 3. 重设索引
df_inner.reset_index()

# 4. 设置日期为索引
df_inner = df_inner.set_index("date")

# 5. 提取27日之前的所有数据
print(df_inner[:"2020-04-27"])

# 6. 使用iloc按位置区域提取数据
print(df_inner.iloc[0:3, 0:2])

# 7. 适应iloc按位置单独提起数据
print(df_inner.iloc[[0, 2, 5], [4, 5]])

# 8. 使用ix按索引标签和位置混合提取数据   错误的在pandas的1.0.0版本开始,移除了Series.ix and DataFrame.ix 方法 所以下面是错误的
# print(df_inner.ix[:'2020-04-23', :4])  # 2020-04-23号之前,前四列数据

# 9. 判断city列的值是否为beijing
print(df_inner["city"].str.lower().map(str.strip).isin(["beijing"]))

# 10. 判断city列里是否包含beijing和shanghai,然后将符合条件的数据提取出来
print(df_inner.loc[df_inner["city"].isin(["beijing", "shanghai"])])


# 六、数据筛选
# 使用与、或、非三个条件配合大于、小于、等于对数据进行筛选,并进行计数和求和。
# 1、使用“与”进行筛选
print(
    df_inner.loc[(df_inner["age"] > 25) & (df_inner["city"] == "beijing"),
                 ["id", "city", "age", "category", "gender"]]
)

# 2. 使用“或”进行筛选
print(
    df_inner.loc[(df_inner["age"] > 25) | (df_inner["city"] == "beijing"),
                 ["id", "city", "age", "category", "gender"]].sort_values(by=["age"], ascending=False)
)

# 3. 使用“非”条件进行筛选
print(
    df_inner.loc[(df_inner["city"] != "beijing"), ["id", "city", "age", "category", "gender"]].sort_values(by=["id"])
)

# 4. 对筛选后的数据按city列进行计数
print(
    df_inner.loc[(df_inner["city"] != "beijing"), ["id", "city", "age", "category", "gender"]].sort_values(by=["id"]).city.count()
)

# 5. 使用query函数进行筛选
print(
    df_inner.query("city == ['beijing', 'shanghai']")
)

# 6. 对筛选后的结果按price进行求和
print(
    df_inner.query("city == ['beijing', 'shanghai']").price.sum()
)


# 七、数据汇总
# 主要函数是groupby和pivote_table
# 1、对所有的列进行计数汇总
print(
    df_inner.groupby("city").count()
)

# 2. 按城市对id字段进行计数
print(
    df_inner.groupby("city")["id"].count()
)

# 3. 对两个字段进行汇总计数
print(
    df_inner.groupby(["city", "size"])["id"].count()
)

# 4. 对city字段进行汇总,并分别计算price的合计和均值
print(
    df_inner.groupby("city")["price"].agg([len, np.sum, np.mean])
)


# 九、数据输出
# 分析后的数据可以输出为xlsx格式和csv格式
# 1、写入Excel
df_inner.to_excel("xlsx_data.xlsx", sheet_name="python")

# 2、写入到CSV
df_inner.to_csv('excel_to_python.csv')


print(df_inner)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

专职

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

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

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

打赏作者

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

抵扣说明:

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

余额充值