pandas库DataFrame模块的入门学习--最全面的DataFrame总结

1 篇文章 0 订阅
1 篇文章 0 订阅

DataFramepandas 库中最核心的数据结构之一,可以看作是一个二维的数据表结构,类似于 Excel 表格或 SQL 中的表格。它由行和列组成,每一列可以存储不同类型的数据(如整数、浮点数、字符串等)。DataFrame 是进行数据分析、处理、清理等操作的强大工具,广泛应用于数据科学和数据分析领域。
以下将从 创建DataFrameDataFrame的基本操作DataFrame 的高级操作三方面进行分析和总结,详细介绍每个方法的使用。

import pandas as pd
import numpy as np

# %%%%%%%%%%%%%%%%%创建DataFrame%%%%%%%%%%%%%%%%%%%%%%%%%
# **********从字典创建DataFrame**************
data = {"name": ["li", "wang", "chong"],
        "age": [18, 20, 18],
        "city": ["河南", "陕西", "杭州"]}
df = pd.DataFrame(data)
print(df)
#     name  age city
# 0     li   18   河南
# 1   wang   20   陕西
# 2  chong   18   杭州
# *********从列表创建DataFrame***************
data = [["li", 18, "河南"],
        ["wang", 20, "陕西"],
        ["chong", 18, "杭州"]]
df = pd.DataFrame(data, columns=["name", "age", "city"])
print(df)
#     name  age city
# 0     li   18   河南
# 1   wang   20   陕西
# 2  chong   18   杭州
# *********从Numpy数组创建DataFrame**********
# 不建议使用,可能会碰到需要转换数据类型的错误
# data = np.array([["li", 18, "河南"],
#                 ["wang", 20, "陕西"],
#                 ["chong", 18, "杭州"]])
# df = pd.DataFrame(data, columns=["name", "age", "city"])
# print(df)
#     name age city
# 0     li  18   河南
# 1   wang  20   陕西
# 2  chong  18   杭州

# %%%%%%%%%%%%%%%%%DataFrame的基本操作%%%%%%%%%%%%%%%%%%%
# 1、查看 DataFrame
# ************* 查看前几行数据*******************
print(df.head())  # 默认显示前 5 行
print(df.head(2))  # 显示前 2 行
# ************* 查看后几行数据*******************
print(df.tail())  # 默认显示后 5 行
print(df.tail(2))  # 显示后 2 行

# 显示DataFrame的基本信息,包括每列的类型、非空值数量,dtypes属性,内存占用等
df.info()
# 显示数值型数据的统计摘要(如均值、标准差、最小值、四分位数等)
print(df.describe())
#              age
# count   3.000000
# mean   18.666667
# std     1.154701
# min    18.000000
# 25%    18.000000
# 50%    18.000000
# 75%    19.000000
# max    20.000000
# 显示行数和列数
print(df.shape)
# (3, 3)
# 获取列名称
print(df.columns)
# Index(['name', 'age', 'city'], dtype='object')
# 查看每列的数据类型
print(df.dtypes)
# name    object
# age      int64
# city    object
# dtype: object
# 2、访问DataFrame数据
# # *******************访问列*******************
# 访问单列
# print(df["name"])
# # 0       li
# # 1     wang
# # 2    chong
# # Name: name, dtype: object
# 访问多列
# print(df[["name", "age"]])
# #     name  age
# # 0     li   18
# # 1   wang   20
# # 2  chong   18
# *******************访问行*******************
# # 按位置获取第 0 行数据
print(df.iloc[0])
# name    li
# age     18
# city    河南
# Name: 0, dtype: object
# 按标签获取第 0 行数据
print(df.loc[0])
# name    li
# age     18
# city    河南
# Name: 0, dtype: object
# 获取第 0 到第 1 行的数据
print(df.iloc[0:2])
#    name  age city
# 0    li   18   河南
# 1  wang   20   陕西
# # **************数据过滤*********************
# # 避免numpy转换的DataFrame int数据类型错误
# 单条件查询,获取 age 大于 18 的行
df_filter = df[df["age"].astype('int64') > 18]
print(df_filter)
# #    name  age city
# # 1  wang   20   陕西
# 多条件查询,获取 age 大于 18和城市为陕西的行
df_multi_filter = df[(df['age'] > 18) & (df['city'] == '陕西')]
print(df_multi_filter)
#    name  age city
# 1  wang   20   陕西
# # # ************保存为excel文件****************
# df.to_excel("output.xlsx", index=False)
# 3、修改DataFrame数据
# *****************修改列值**********************
# 增加 age 列的每个值 2
df['age'] = df['age'] + 2
print(df)
# # *****************新增列*********************
df["salary"] = [20000, 30000, 50000]  # 新增1列
print(df)
#     name  age city  Salary
# 0     li   18   河南   20000
# 1   wang   20   陕西   30000
# 2  chong   18   杭州   50000
#  *****************删除列*********************
df.drop('salary', axis='columns', inplace=True)  # 删除salary 列,inplace=True 表示原地修改
print(df)
#     name  age city
# 0     li   20   河南
# 1   wang   22   陕西
# 2  chong   20   杭州
#  *****************重命名列*********************
# df.rename(columns={'age': 'age_years'}, inplace=True)  # 将 Age 列重命名为 Age_Years
# print(df)
#     name  age_years city
# 0     li         20   河南
# 1   wang         22   陕西
# 2  chong         20   杭州

# 4、数据清理
#  *****************处理缺失值*********************
# 删除包含 NaN 的行
df.dropna()
# 将所有 NaN 替换为 0
df.fillna(0)
# 使用列的均值填充 NaN
# df['age'].fillna(df['age'].mean(), inplace=True)
df
# ******************删除重复值*********************
data = [["li", 18, "河南"],
        ["wang", 20, "陕西"],
        ["chong", 18, "杭州"],
        ["li", 18, "河南"]]
df = pd.DataFrame(data, columns=["name", "age", "city"])
print(df)
#     name  age city
# 0     li   18   河南
# 1   wang   20   陕西
# 2  chong   18   杭州
# 3     li   18   河南
df.drop_duplicates(inplace=True)  # 删除重复的行
print(df)
#     name  age city
# 0     li   18   河南
# 1   wang   20   陕西
# 2  chong   18   杭州
# 5、数据排序
# ******************按列排序*********************
# 按 age列升序排序
df.sort_values(by='age', ascending=True, inplace=True)
print(df)
#     name  age city
# 0     li   18   河南
# 2  chong   18   杭州
# 1   wang   20   陕西
# 按 age 列降序排序
df.sort_values(by='age', ascending=False, inplace=True)
print(df)
#     name  age city
# 1   wang   20   陕西
# 0     li   18   河南
# 2  chong   18   杭州
# 按多个列排序
df.sort_values(by=['age', 'name'], ascending=[True, False], inplace=True)
print(df)
#     name  age city
# 0     li   18   河南
# 2  chong   18   杭州
# 1   wang   20   陕西
# 按索引降序排列
data = [["li", 18, "河南"],
        ["wang", 20, "陕西"],
        ["chong", 18, "杭州"],
        ["li", 18, "河南"]]
df = pd.DataFrame(data, columns=["name", "age", "city"])
print(df)
df.sort_index(ascending=False, inplace=True)
print(df)
#     name  age city
# 3     li   18   河南
# 2  chong   18   杭州
# 1   wang   20   陕西
# 0     li   18   河南

# 6. 分组和聚合
# 按某列分组并进行聚合操作(如均值、求和等)
data = [["li", 18, "河南"],
        ["wang", 20, "陕西"],
        ["chong", 18, "杭州"],
        ["zhu", 22, "河南"]]
df = pd.DataFrame(data, columns=["name", "age", "city"])
print(df)
print(df.groupby("city")["age"].sum())
# city
# 杭州    18
# 河南    40
# 陕西    20
# Name: age, dtype: int64
print(df.groupby(["city", "name"])["age"].mean())
# city  name
# 杭州    chong    18.0
# 河南    li       18.0
#       zhu      22.0
# 陕西    wang     20.0
# Name: age, dtype: float64
# 聚合多个列
df["salary"] = [20000, 30000, 40000, 50000]  # 新增1列
print(df)
#     name  age city  salary
# 0     li   18   河南   20000
# 1   wang   20   陕西   30000
# 2  chong   18   杭州   40000
# 3    zhu   22   河南   50000
# 对 age 计算均值,对 salary 计算和
print(df.groupby('city').agg({'age': 'mean', 'salary': 'sum'}))
#        age  salary
# city
# 杭州    18.0   40000
# 河南    20.0   70000
# 陕西    20.0   30000
# 7、合并、连接和操作数据
# 合并两个 DataFrame
data1 = {"name": ["li", "wang", "chong"],
        "age": [18, 20, 18]}
df_1 = pd.DataFrame(data1)
data2 = {"name": ["li", "wang", "chong","zhu"],
        "salary": [200000, 300000, 100000, 80000]}
df_2 = pd.DataFrame(data2)
df12 = df_1.merge(df_2, on="name")
print(df12)
#     name  age  salary
# 0     li   18  200000
# 1   wang   20  300000
# 2  chong   18  100000
df_1_2 = pd.merge(df_1, df_2, on="name")
print(df_1_2)
#     name  age  salary
# 0     li   18  200000
# 1   wang   20  300000
# 2  chong   18  100000

# 拼接两个 DataFrame
df1 = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [25, 30]})
df2 = pd.DataFrame({'Name': ['Charlie', 'David'], 'Age': [35, 40]})
# 纵向拼接
concat_df = pd.concat([df1, df2], ignore_index=True)
# 注意 ignore_index 如果为False,则索引为 0 1 0 1
print(concat_df)
#       Name  Age
# 0    Alice   25
# 1      Bob   30
# 2  Charlie   35
# 3    David   40
# 8. 导入和导出数据
# *************读取 CSV 文件****************
# df = pd.read_csv('data.csv')
# *************读取 Excel 文件****************
# df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 保存为 CSV 文件,index=False 不保存索引
# df.to_csv('output.csv', index=False)
# 保存为 Excel 文件,index=False 不保存索引
# df.to_excel('output.xlsx', sheet_name='Sheet1', index=False)

# %%%%%%%%%%%%%%%%%%%DataFrame 的高级操作%%%%%%%%%%%%%%%%%%%%
data = {"name": ["li", "wang", "chong"],
        "age": [18, 20, 18],
        "city": ["河南", "陕西", "杭州"]}
df = pd.DataFrame(data)
# 1. 使用 apply 函数
# apply 函数可以对 DataFrame 的每一列或每一行应用自定义函数,非常灵活。
df['future_age'] = df['age'].apply(lambda x: x + 10)  # 对 Age 列应用 lambda 函数
print(df)
#     name  age city  future_age
# 0     li   18   河南          28
# 1   wang   20   陕西          30
# 2  chong   18   杭州          28
# 2. 透视表(Pivot Table)
# pivot_table 用于创建类似 Excel 的透视表,帮助对数据进行多维汇总和分析
data = {
    'Name': ['Alice', 'Bob', 'Alice', 'Bob', 'Charlie'],
    'City': ['New York', 'Los Angeles', 'New York', 'Los Angeles', 'New York'],
    'Age': [25, 30, 27, 28, 35]
}
df = pd.DataFrame(data)
print(df)
#       Name         City  Age
# 0    Alice     New York   25
# 1      Bob  Los Angeles   30
# 2    Alice     New York   27
# 3      Bob  Los Angeles   28
# 4  Charlie     New York   35
pivot = df.pivot_table(values='Age', index='City', columns='Name', aggfunc='mean')
print(pivot)

# Name        Alice  Bob  Charlie
# City
# Los Angeles    NaN   29      NaN
# New York      26.0  NaN     35.0

# 3、时间序列数据处理
# 创建示例数据
data = {
    'Date': ['2023-01-05', '2023-01-15', '2023-02-03', '2023-02-20', '2023-03-05', '2023-03-25'],
    'Temperature': [5, 7, 10, 8, 15, 12],
    'Rainfall': [10, 12, 8, 5, 0, 2]
}

# 创建 DataFrame
df = pd.DataFrame(data)
print("原始数据:")
print(df)
# 原始数据:
#          Date  Temperature  Rainfall
# 0  2023-01-05            5        10
# 1  2023-01-15            7        12
# 2  2023-02-03           10         8
# 3  2023-02-20            8         5
# 4  2023-03-05           15         0
# 5  2023-03-25           12         2
# 将 Date 列转换为 datetime 格式
df['Date'] = pd.to_datetime(df['Date'])

# 将 Date 列设置为索引
df.set_index('Date', inplace=True)

print("设置日期为索引后的数据:")
print(df)
# 设置日期为索引后的数据:
#             Temperature  Rainfall
# Date
# 2023-01-05            5        10
# 2023-01-15            7        12
# 2023-02-03           10         8
# 2023-02-20            8         5
# 2023-03-05           15         0
# 2023-03-25           12         2
# 按月重采样并计算每月的平均值
monthly_average = df.resample('M').mean()

print("按月重采样后的数据:")
print(monthly_average)
# 按月重采样后的数据:
#             Temperature  Rainfall
# Date
# 2023-01-31          6.0      11.0
# 2023-02-28          9.0       6.5
# 2023-03-31         13.5       1.0

【以上基本上涵盖了pandas库中DataFrame的所有常用的用法,欢迎各位学习和交流!】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值