数据分析入门之Pandas库基本操作

#VibeCoding·九月创作之星挑战赛#

Pandas

1.Pandas介绍

Pandas是Python第三方库,提供高性能易用数据类型和分析工具。当谈论数据处理和分析时,Pandas 库就像一个强大的工具箱,可以帮助你处理和分析各种类型的数据,从简单的电子表格到大规模的数据集。以下是关于 Pandas 库的通俗介绍

  1. 数据表格的专家: Pandas 主要用于处理和操作数据表格,就像你在 Excel 或 Google Sheets 中所做的那样。它能够轻松加载、创建、编辑和保存数据表格。

  2. 强大的数据结构: Pandas 提供两种主要的数据结构,称为DataFrame和Series。DataFrame 是一个二维的数据表格,而 Series 是一维的数据序列。你可以将它们想象成 Excel 表格中的列和行。

  3. 数据清洗和转换: 数据通常不是完美的,可能存在缺失值、重复项或格式问题。Pandas 提供了各种功能,帮助你轻松地清洗和转换数据,使其适合分析。

  4. 数据筛选和选择: 你可以使用 Pandas 来选择和过滤数据,只提取你关心的部分。这对于快速查找特定信息非常有用。

  5. 数据聚合和分组: Pandas 允许你根据某些列的值对数据进行分组,并进行聚合操作,如计算平均值、总和、中位数等统计数据。

  6. 时间序列数据: 如果你处理时间相关的数据,Pandas 也提供了强大的时间序列支持,可以帮助你分析时间序列数据。

  7. 数据可视化: Pandas 可以与其他数据可视化库(如Matplotlib和Seaborn)无缝集成,帮助你创建各种类型的图表和图形,以更好地理解数据。

  8. 数据导入和导出: Pandas 能够读取和写入各种不同格式的数据,包括 CSV、Excel、SQL 数据库、JSON 等等。

  9. 自动化数据处理: 你可以使用 Pandas 来自动化一些常见的数据处理任务,如数据合并、拆分、透视表的创建等。

总之,Pandas 是一个非常强大而灵活的数据处理和分析库,它为数据科学家、分析师和工程师提供了丰富的工具和函数,使他们能够更轻松地处理和分析各种类型的数据,从而做出更明智的决策。无论是初学者还是专业人士,Pandas 都是一个不可或缺的数据分析工具。

2.Pandas的使用方法

2.1 对象创建

  • Series对象

    Series 是带标签数据的一维数组

    通用结构: pd.Series(data, index=index, dtype=dtype)

    data:数据,可以是列表*,字典Numpy数组*

    index:索引,为可选参数

    dtype: 数据类型,为可选参数

    import pandas as pd
    
    #创建Series对象
    a = pd.Series()
    #a = Series([], dtype: object)
    
    #传入列表
    #指定下标index
    b = pd.Series([1,2,3,4,5,6],index=['a','b','c','d','e','f'])
    '''
    a    1
    b    2
    c    3
    d    4
    e    5
    f    6
    dtype: int64
    '''
    #不指定下标index,默认为0开始
    c = pd.Series([1,2,3,4,5,6])
    '''
    0    1
    1    2
    2    3
    3    4
    4    5
    5    6
    dtype: int64
    '''
    
    #传入字典
    e = pd.Series({'name':'lisi','age':14,'sex':'M'})
    '''
    name    lisi
    age       14
    sex        M
    dtype: object
    '''
    
  • DataFrame对象

    DataFrame 是带标签数据的多维数组

    通用结构: pd.DataFrame(data, index=index, columns=columns)

    data:数据,可以是列表,字典或Numpy数组

    index:索引,为可选参数

    columns: 列标签,为可选参数

    import pandas as pd
    
    dict = {"BeiJing": 2154,
            "ShangHai": 2424,
            "ShenZhen": 1303,
            "HangZhou": 981}
    
    data = pd.Series(dict)
    pd.DataFrame(data)
    '''
                 0
    BeiJing   2154
    ShangHai  2424
    ShenZhen  1303
    HangZhou   981
    
    '''
    
    a = pd.DataFrame(data,columns=['123'])
    '''
               123
    BeiJing   2154
    ShangHai  2424
    ShenZhen  1303
    HangZhou   981
    '''
    

总结对比表

特性SeriesDataFrame
维度一维二维
结构索引 + 单一列值行索引 + 列索引 + 多列值
数据类型所有元素类型一致每列可不同类型
用途单一维度数据存储结构化表格数据处理
形状表示(n,)(行数,列数)

2.2 数据查看与基本信息

# 查看前5行(默认)
df.head()
# 查看后3行
df.tail(3)
# 查看形状(行数, 列数)
print(df.shape)
# 查看列名
print(df.columns)
# 查看数据类型和缺失值
df.info()
# 数值型列的统计摘要(均值、标准差等)
df.describe()
'''
               123
count     4.000000
mean   1715.500000
std     684.081136
min     981.000000
25%    1222.500000
50%    1728.500000
75%    2221.500000
max    2424.000000

'''
函数解析
  • head():查看数据前几行

  • tail():查看数据后几行

  • shape():查看形状

  • info():查看数据类型与缺失值

  • columns:查看列名

  • describe():数据的统计摘要

2.3 数据筛选与查询

  • 按列筛选

    # 选择单列(返回Series)
    ages = df['Age']
    # 选择多列(返回DataFrame)
    sub_df = df[['Name', 'City']]
    
  • 按行筛选

    # 年龄大于30的行
    filtered = df[df['Age'] > 30]
    # 城市为'London'且年龄小于35的行
    filtered = df[(df['City'] == 'London') & (df['Age'] < 35)]
    
  • 按索引筛选

    # 按标签索引(loc)
    row = df.loc[1]  # 第2行(索引为1)
    sub_df = df.loc[1:3, ['Name', 'Age']]  # 行1-3,列Name和Age
    
    # 按位置索引(iloc)
    row = df.iloc[0]  # 第1行(位置0)
    sub_df = df.iloc[0:2, 0:2]  # 前2行,前2列
    

2.4 数据清洗

  • 处理缺失值

    # 检查缺失值(每列缺失值数量)
    df.isnull().sum()
    # 删除含缺失值的行(how='all'表示全为缺失值才删除)
    df.dropna(axis=0, how='any', inplace=True)
    # 填充缺失值(用均值填充Age列)
    df['Age'].fillna(df['Age'].mean(), inplace=True)
    
    函数解析
    • isnull():对 DataFrame 中的每个元素进行判断,若为缺失值(NaNNone 等),则标记为 True;否则标记为 False

    • num():对 df.isnull() 返回的布尔型 DataFrame 进行求和。在 Pandas 中,True 会被当作 1False 当作 0,因此求和结果即每列的缺失值数量。

    • dropna():删除 DataFrame 中存在缺失值(NaNNone 等)的行或列,具体删除行还是列由 axis 参数决定。

      • **axis**指定删除方向:

        • axis=0(默认值):删除包含缺失值的行
        • 若改为 axis=1:删除包含缺失值的列
      • **how**指定删除条件:

        • how='any'(默认值):只要行 / 列中存在至少 1 个缺失值,就删除该行 / 列;
        • 若改为 how='all':只有当行 / 列中所有值都是缺失值时,才删除该行 / 列。
      • **inplace**指定操作方式:

        • inplace=True:直接在原 DataFrame 上修改(删除后原数据会变化);
        • 若改为 inplace=False(默认值):不修改原数据,而是返回一个删除缺失值后的新 DataFrame(需用变量接收,如 new_df = df.dropna(...))。
      • fillna():填充缺失值

  • 去重

    # 检查重复行
    df.duplicated().sum()
    # 删除重复行(保留第一行)
    df.drop_duplicates(inplace=True)
    
    函数解析
    • duplicated():检查重复行

    • drop_duplicates()

      • inplace=True:表示直接在原 DataFrame 上修改(删除重复行),不返回新对象;

      • 若设为 False(默认),则会返回一个删除重复行后的新 DataFrame,原 DataFrame 保持不变。

  • 数据类型转换

    # 将字符串类型的日期转为datetime
    df['Date'] = pd.to_datetime(df['Date'])
    # 将Age列转为整数
    df['Age'] = df['Age'].astype(int)
    

2.5 数据分组与聚合

类似 SQL 的 GROUP BY 操作:

# 按City分组,计算每组的平均年龄
city_age_mean = df.groupby('City')['Age'].mean()

# 多列聚合(计算每组的年龄均值和人数)
agg_result = df.groupby('City').agg({
    'Age': ['mean', 'count'],
    'Name': 'nunique'  # 不同姓名的数量
})

2.6 数据合并与连接

# 横向合并(类似SQL的JOIN)
df1 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['A', 'B', 'C']})
df2 = pd.DataFrame({'ID': [2, 3, 4], 'Age': [20, 30, 40]})
merged = pd.merge(df1, df2, on='ID', how='inner')  # 内连接

# 纵向拼接(添加行)
df3 = pd.DataFrame({'ID': [5], 'Name': ['D']})
concatenated = pd.concat([df1, df3], ignore_index=True)  # 忽略原索引

2.7 场景操作

  • 列操作

    # 添加新列(年龄加5)
    df['Age_plus_5'] = df['Age'] + 5
    # 重命名列
    df.rename(columns={'City': 'City_Name'}, inplace=True)
    # 删除列
    df.drop(columns=['Age_plus_5'], inplace=True)
    
  • 排序操作

    # 按Age升序排序(默认)
    df.sort_values(by='Age', inplace=True)
    # 按City降序、Age升序排序
    df.sort_values(by=['City', 'Age'], ascending=[False, True], inplace=True)
    
  • 字符串处理

    # 提取Name列的首字母
    df['Name_Init'] = df['Name'].str[0]
    # 转换为小写
    df['City_Lower'] = df['City'].str.lower()
    

3 文件的读取与写入

3.1 文件的写入

  • 写入CSV文件:

    import pandas as pd
     
    data_read_path =r"F:\joyful-pandas-master\data\my_csv.csv"
    data_write_path = r"F:\joyful-pandas-master\data\my_csv_saved.csv"
     
    data = pd.read_csv(data_read_path)
    data.to_csv(data_write_path, index=False) # 此时不能打开被写的文件
     
    

    data.to_csv(data_write_path, index=False)
    把data中的数据 ,写入到data_write_path 中,且设置去除索引操作

  • 写入TXT文件:

    data.to_csv('data/my_txt_saved.txt', sep='\t', index=False)
    
    

    写txt文件使用的是:
    .to_csv()方法
    记得设置分割方式:sep

  • 写入Excel文件:

    data.to_excel('data/my_excel_saved.xlsx', index=False)
    
    

3.2 文件的读取

  • 读CSV文件:

    import pandas as pd
    data=pd.read_csv('path',sep=',',header=0,names=["第一列""第二列""第三列"],encoding='utf-8')
    
    • path: 要读取的文件的绝对路径

    • sep:指定列和列的间隔符,默认sep=‘,’

    • 若sep=‘’\t",即列与列之间用制表符\t分割,相当于tab——四个空格

    • header:列名行,默认为0

    • names:列名命名或重命名

    • encoding:指定用于unicode文本编码格式

  • 读TXT文件:

    import pandas as pd
     
    # 从CSV文件读取数据
    df = pd.read_csv('example.csv',header=None)
    print(df)
    
    • 其中 header=None用于告诉Pandas不要将第一行数据解释为列名,而是将其作为数据的一部分。
  • 读Excel文件:

    import pandas as pd
     
    # 从Excel文件读取数据
    df = pd.read_excel('example.xlsx',header=None)
    print(df)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值