Python 数据分析入门|01 Pandas 基础:1 行代码读取 Excel/Csv文件

学习python数据分析之前, 如果你已经搞懂了Python 基础语法,那么现在就可以进入数据分析的“核心环节”——和真实数据打交道!初学者拿到数据时,会陷入“手动翻 Excel”的误区:面对几百行甚至几千行的销售表、用户表,一遍遍滚动鼠标看数据,既浪费时间又容易漏掉关键信息(比如“这列数据有多少空值?”“销量最高是多少?”)。

其实用 Pandas 库,1 行代码就能加载 Excel/Csv 数据,再用 3 个简单方法,5 分钟内就能把数据的“家底”摸得清清楚楚。今天这篇就带大家入门 Pandas:从“读数据”到“快速分析数据概况”,全程附超市销售数据实战,跟着敲代码就能上手。

先搞懂:为什么数据分析一定要用 Pandas?

初学者可能会问:“我用 Excel 也能看数据,为什么要学 Pandas?”举个真实场景你就懂了:
如果给你一个 10 万行的“超市月度销售数据”,用 Excel 打开要等半天,想知道“有多少列数据、每列是什么类型、有没有空值”,得手动点每一列看;而用 Pandas,1 行代码加载数据,1 行代码就能输出所有关键信息,全程不超过 10 秒。

Pandas 本质是 Python 的“数据处理神器”,专门解决数据分析的“第一个痛点”——高效加载和查看数据,它的核心优势对新手特别友好:

  • ✅ 1 行代码读取 Excel/Csv/数据库等几乎所有格式的数据;
  • ✅ 自带“快速探查”工具,不用写复杂逻辑就能了解数据结构;
  • ✅ 处理大数据不卡顿(比 Excel 快 10 倍以上);
  • ✅ 后续数据清洗、筛选、统计都能无缝衔接。

简单说:学会 Pandas 读数据+查概况,就等于跨进了数据分析的“大门”。

第一步:准备工作

1. 检查/安装 Pandas

默认已经安装python环境和pycharm环境,并已经安装pandas模块,输入 import pandas as pd 并运行,没报错就说明有 Pandas.

2. 准备实战数据(超市销售数据)

为了让初学者有真实的操作感,我们用“超市销售数据”作为案例,数据包含 5 列关键信息(模拟真实场景):

日期商品类别商品名称销量(件)销售额(元)
2026-01-01 食品 面包 50 250
2026-01-01 饮料 可乐 30 90
2026-01-02 日用品 纸巾 20 60

怎么获取这个数据? 两种方式任选:

  • 方式 1:手动新建 Excel 文件(命名为 超市销售数据.xlsx),把上面的示例数据输进去,再补几行自己编的数据(比如再加 10 行,包含“零食”“水果”等类别);
  • 方式 2:用代码自动生成,在 pycharm 里运行下面的代码,会自动生成 超市销售数据.xlsx
import pandas as pd
import numpy as np

# 自动生成 20 行超市销售数据
data = {
    "日期": pd.date_range(start="2026-01-01", periods=20, freq="D"),  # 1月1日起20天
    "商品类别": np.random.choice(["食品", "饮料", "日用品", "零食", "水果"], 20),  # 随机选类别
    "商品名称": np.random.choice(["面包", "可乐", "纸巾", "薯片", "苹果"], 20),  # 随机选商品
    "销量(件)": np.random.randint(10, 100, 20),  # 销量10-100之间随机
    "销售额(元)": np.random.randint(30, 500, 20)  # 销售额30-500之间随机
}

# 生成Excel文件
df = pd.DataFrame(data)
df.to_excel("超市销售数据.xlsx", index=False)  # index=False 表示不保存行号
print("数据文件已生成:超市销售数据.xlsx")

关键提醒:文件路径别搞错,把 Excel 文件和python执行文件放在同一目录.

核心操作 1:1 行代码读取 Excel/Csv 数据

Pandas 读数据的核心函数是 read_excel()(读 Excel)和 read_csv()(读 Csv),刚开始学习不用记太多参数,先掌握“最常用 3 个参数”,就能应对 90% 的场景。

1. 读取 Excel 文件,最常用。

用 pd.read_excel() 函数,基础用法只有 1 行代码:

# 导入Pandas库,习惯简写成pd
import pandas as pd

# 1行代码读取Excel文件(文件和Notebook在同一文件夹)
df = pd.read_excel("超市销售数据.xlsx")

# 打印“数据框”类型(df是Pandas的核心对象,叫DataFrame,类似Excel表格)
print("数据类型:", type(df))  # 输出:<class 'pandas.core.frame.DataFrame'>
print("数据加载完成!")

运行后如果没报错,就说明数据读成功了!这里的 df 是 Pandas 的“数据框”(DataFrame),可以理解为“Python 里的 Excel 表格”,后续所有操作都围绕 df 展开。  

3 个常用参数(解决 80% 问题)

实际工作中,Excel 文件可能有“多个 sheet”“表头不在第一行”“中文乱码”等问题,这时候加参数就能解决:

参数名作用示例
sheet_name 指定读取哪个 sheet(默认读第一个) pd.read_excel("数据.xlsx", sheet_name="1月销售")
skiprows 跳过前 N 行(比如跳过表头前的说明行) pd.read_excel("数据.xlsx", skiprows=2)(跳过前2行)
encoding 解决中文乱码(Excel 常用"utf-8"或"gbk") pd.read_excel("数据.xlsx", encoding="gbk")

 示例:读指定 sheet 的数据
如果你的 Excel 里有两个 sheet(“1月销售”和“2月销售”),想读“2月销售”:

df_feb = pd.read_excel("超市销售数据.xlsx", sheet_name="2月销售")
print("2月销售数据前5行:")
print(df_feb.head())

2. 读取 Csv 文件(数据分析另一种常用格式)

Csv 文件比 Excel 更小、加载更快,很多公开数据集(比如 Kaggle 上的)都是 Csv 格式,用 pd.read_csv() 读取,用法和 Excel 类似:

# 1行代码读Csv文件(如果没有Csv文件,可先把Excel另存为Csv)
df_csv = pd.read_csv("超市销售数据.csv")

# 解决Csv中文乱码:加encoding参数
df_csv = pd.read_csv("超市销售数据.csv", encoding="utf-8")  # 大多数情况用utf-8
# 如果utf-8不行,换gbk:
# df_csv = pd.read_csv("超市销售数据.csv", encoding="gbk")

核心操作 2:3 个方法,让你看懂数据概况

数据读进来后,最该做的不是马上分析,而是“先摸清数据的家底”——比如有多少行多少列?有没有空值?数值型数据的范围是多少?Pandas 用 3 个方法就能搞定,全程不用写复杂逻辑。

方法 1:df.head() —— 看前几行数据,快速了解结构

如果数据有 10 万行,直接打印所有数据会卡死,head() 默认显示前 5 行,让你快速知道“数据有哪些列、每列是什么内容”。

# 1. 默认显示前5行,以我们的超市数据为例.
print("数据前5行(默认):")
print(df.head())
#######################################
数据前5行(默认):
          日期 商品类别 商品名称  销量(件)  销售额(元)
0 2026-01-01   零食   薯片     90     471
1 2026-01-02   食品   可乐     31     161
2 2026-01-03  日用品   可乐     28     155
3 2026-01-04   零食   面包     62     498
4 2026-01-05   零食   可乐     62     405
  • 左边的 0、1、2、3、4 是“行索引”(类似 Excel 的行号);
  • 第一行是“列名”(日期、商品类别、销量等);
  • 从内容能快速判断:这是一个按日期记录的销售数据,包含类别、商品、销量、金额。

方法 2:df.info() —— 看数据类型和缺失值,排查“脏数据”

info() 是数据分析的“排雷工具”,能告诉你:

  • 数据有多少行(RangeIndex)、多少列(Data columns);
  • 每列的数据类型(dtype):比如日期是 datetime64、文本是 object、数值是 int64
  • 每列有多少非空值(Non-Null Count):如果非空值数 < 总行数,说明有缺失值。

代码示例:

print("数据概况(info()):")
print(df.info())

##############################
运行结果解读:
数据概况(info()):
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 20 entries, 0 to 19                       # 共20行数据(索引0到19)
Data columns (total 5 columns):                       # 共5列
 #   Column  Non-Null Count  Dtype         
---  ------  --------------  -----         
 0   日期      20 non-null     datetime64[ns]          # 日期列:20个非空值,类型是日期
 1   商品类别    20 non-null     object                 # 商品类别:20个非空值,类型是文本
 2   商品名称    20 non-null     object                 # 商品名称:20个非空值,类型是文本
 3   销量(件)   20 non-null     int64                 # 销量:20个非空值,类型是整数
 4   销售额(元)  19 non-null     int64                # 销售额:19个非空值(有1个缺失值),类型是浮点数
dtypes: datetime64[ns](1), int64(2), object(2)
memory usage: 932.0+ bytes                            # 占用内存大小

该关注什么?

  1. 缺失值:比如“销售额(元)”只有 19 个非空值,说明有 1 个空值(20-19=1),后续需要处理,数据清洗时处理;
  2. 数据类型是否正确:比如“日期”列如果显示 object(文本类型),而不是 datetime64,说明读数据时没识别成日期,后续需要转换;
  3. 列名是否清晰:如果列名是“Unnamed: 0”“列1”这种乱码,说明 Excel 表头有问题,需要重新指定表头(用 header 参数,比如 read_excel(..., header=1) 表示用第 2 行做表头)。

方法 3:df.describe() —— 看数值型数据的统计指标,找异常值

describe() 会自动计算所有数值型列(比如销量、销售额)的关键统计量,帮你快速判断“数据有没有异常”(比如销量突然出现 1000 件,可能是录入错误)。

print("数值型数据统计(describe()):")
print(df.describe())

#############################
 销量(件)    销售额(元)
count   20.000000   19.000000  # 有效数据个数(销量20个,销售额19个)
mean    52.650000   228.421053  # 平均值(平均销量52.65件,平均销售额228.42元)
std     25.324567   125.689741  # 标准差(数值越大,数据波动越大)
min     15.000000    45.000000  # 最小值(最低销量15件,最低销售额45元)
25%     32.500000   120.000000  # 25分位数(25%的数据低于这个值)
50%     51.500000   210.000000  # 50分位数(中位数,一半数据低于这个值)
75%     73.750000   320.000000  # 75分位数(75%的数据低于这个值)
max     98.000000   480.000000  # 最大值(最高销量98件,最高销售额480元)

该关注什么?

  1. 最大值/最小值是否合理:比如如果销量的 max 是 1000,而平均值只有 52,说明可能有异常值(比如多输了一个 0),需要后续检查;
  2. 平均值和中位数(50%)的差距:如果平均值远大于中位数,说明数据有“极端大值”(比如有一笔销售额 10000 元,拉高了平均值);
  3. 数据波动:标准差(std)越大,说明数据波动越大(比如销量标准差 25,说明销量在 52±25 之间波动,属于正常范围)。

实战:用超市销售数据完整走一遍流程

现在把前面的内容串起来,用我们的超市销售数据做

# 1. 导入Pandas库
import pandas as pd

# 2. 读取Excel数据
# 这里假设Excel只有一个sheet,没有中文乱码
df = pd.read_excel("超市销售数据.xlsx")
print("✅ 超市销售数据加载完成!")

# 3. 用head()看前5行,了解数据结构
print("\n===== 1. 数据前5行(head()) =====")
print(df.head())

# 4. 用info()看数据类型和缺失值
print("\n===== 2. 数据概况(info()) =====")
print(df.info())
# 从info()发现:销售额(元)有1个缺失值,日期列是datetime类型(正常)

# 5. 用describe()看数值型数据统计
print("\n===== 3. 数值型数据统计(describe()) =====")
print(df.describe())
# 从describe()发现:销量最高98件,最低15件,平均52.65件;销售额最高480元,最低45元

# 6. 额外小技巧:看有多少种商品类别(用value_counts())
print("\n===== 4. 商品类别分布 =====")
category_count = df["商品类别"].value_counts()  # 统计每个类别的出现

运行结果(参考):

✅ 超市销售数据加载完成!

===== 1. 数据前5行(head()) =====
          日期  商品类别 商品名称  销量(件)  销售额(元)
0 2026-01-01    食品    面包       50        250.0
1 2026-01-02    饮料    可乐       30         90.0
2 2026-01-03    日用品  纸巾       20         60.0
3 2026-01-04    零食    薯片       45        180.0
4 2026-01-05    水果    苹果       60        300.0

===== 2. 数据概况(info()) =====
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 20 entries, 0 to 19
Data columns (total 5 columns):
 #   Column    Non-Null Count  Dtype         
---  ------    --------------  -----         
 0   日期       20 non-null     datetime64[ns]
 1   商品类别     20 non-null     object        
 2   商品名称     20 non-null     object        
 3   销量(件)   20 non-null     int64         
 4   销售额(元)  19 non-null     float64       
dtypes: datetime64[ns](1), float64(1), int64(1), object(2)
memory usage: 928.0+ bytes

===== 3. 数值型数据统计(describe()) =====
        销量(件)    销售额(元)
count   20.000000   19.000000
mean    52.650000   228.421053
std     25.324567   125.689741
min     15.000000    45.000000
25%     32.500000   120.000000
50%     51.500000   210.000000
75%     73.750000   320.000000
max     98.000000   480.000000

===== 4. 商品类别分布 =====
商品类别
食品      6
饮料      5
日用品    4
零食      3
水果      2
Name: count, dtype: int64

从结果里得出什么结论?

  1. 数据规模:20 行 5 列,属于小数据集,后续处理起来很方便;
  2. 数据质量:只有“销售额”有 1 个缺失值,整体质量较好,后续只需简单清洗;
  3. 业务信息:食品类商品销量最高(6 次),水果类最少(2 次);平均每次销量 52.65 件,没有极端异常值。

避坑指南:最常见的错误及解决方案

避坑 1:中文乱码(读取后列名或内容显示乱码)

原因:文件编码格式和 Pandas 读取时的编码不匹配(Excel 常用“gbk”或“utf-8”,Csv 同理)。
解决方案

    1. 读 Excel 时加 encoding 参数
df = pd.read_excel("超市销售数据.xlsx", encoding="gbk")  # 先试gbk
# 如果gbk不行,试utf-8:
# df = pd.read_excel("超市销售数据.xlsx", encoding="utf-8")
  1. 读 Csv 时同理:
df = pd.read_csv("超市销售数据.csv", encoding="gbk")

避坑 2:日期列读成文本类型(info()里日期列显示 object)

原因:Pandas 没自动识别日期格式(比如日期是“2026/01/01”或“01-01-2026”,格式不标准)。
解决方案

    1. 读数据时加 parse_dates 参数,指定哪一列是日期:
# parse_dates=["日期"] 表示把“日期”列解析成日期类型
df = pd.read_excel("超市销售数据.xlsx", parse_dates=["日期"])
  1. 如果还是不行,后续用 pd.to_datetime() 转换:
# 把“日期”列从文本转成日期类型
df["日期"] = pd.to_datetime(df["日期"])

总结:数据分析第一步,先把“数据家底”摸清

这篇我们学会了 Pandas 的核心入门操作:

  1. 用 read_excel()/read_csv() 1 行代码读取数据,掌握 sheet_name/encoding/parse_dates 3 个常用参数;
  2. 用 head() 看数据结构,info() 查数据类型和缺失值,describe() 分析数值统计;
  3. 用实战数据走通“读数据→分析概况”的完整流程,了解业务信息。

记住:数据分析的第一步永远是“了解数据”,不要拿到数据就直接做统计或画图——先摸清数据的行数、列数、缺失值、异常值,后续的清洗和分析才会少走弯路。

 

参考文档:https://mp.weixin.qq.com/s/Tr3Kya-vVNrSIp8Olw7xuA

posted @ 2026-01-19 10:55  梦徒  阅读(57)  评论(0)    收藏  举报