☰
零基础Python数据分析入门:环境搭建、NumPy与Pandas核心操作全解析
2026/10/6 7:32:45 网站建设 项目流程

这类标题看起来像是打包了很多内容,但真正想学数据分析的人,最怕的就是东一榔头西一棒子,学了半天还是不知道从哪下手。这篇文章不打算把所有东西都塞给你,而是围绕“数据分析”这个核心目标,帮你理出一条从环境搭建到核心库使用的清晰路径。如果你是完全零基础,或者学过一些Python语法但不知道如何用在数据分析上,这篇文章会告诉你每一步该做什么、为什么这么做,以及怎么验证自己学会了。

核心就三件事:把Python环境装对、理解数据处理的基本逻辑、用对工具(numpy和pandas)。很多教程卡住人的地方,往往不是代码有多难,而是环境报错、库装不上、或者不知道某个功能该用numpy还是pandas。我会把这些容易踩坑的地方都拆开讲清楚。

1. 先解决环境问题:别让安装报错劝退你

数据分析的第一步,不是写代码,而是把环境准备好。一个干净、可复现的环境,能避免80%的“莫名其妙”的错误。

1.1 Python安装:选对版本和安装方式

很多人直接从Python官网下载安装包,这没问题,但对于数据分析来说,我更推荐使用Anaconda或Miniconda。原因很简单:数据分析依赖的库(如numpy, pandas)通常需要底层C库编译,单独安装容易遇到兼容性问题。Conda作为一个包和环境管理器,能帮你处理好这些依赖。

具体操作:

  1. 下载Miniconda:去Miniconda官网,根据你的操作系统(Windows/macOS/Linux)下载对应的安装包。Miniconda比完整的Anaconda体积小,只包含最核心的conda和Python。
  2. 安装时注意:安装向导中,务必勾选“Add Miniconda3 to my PATH environment variable”(将Miniconda3添加到我的PATH环境变量)。这能让你在命令行(终端/CMD)中直接使用conda和python命令。
  3. 验证安装:安装完成后,打开一个新的命令行窗口(重要,必须新开),输入以下命令:
    python --version conda --version
    如果都能正确显示版本号(如Python 3.11.x, conda 24.x.x),说明安装成功。

注意:如果你已经安装了Python,但后续安装numpy/pandas总出错,可以考虑用conda新建一个独立环境,与系统Python隔离,这是最干净的解决方案。

1.2 包管理工具:pip 和 conda 怎么选

安装好Python后,你需要安装第三方库。这里有两个主要工具:

  • pip:Python自带的包安装工具,资源丰富。
  • conda:Anaconda/Miniconda自带的工具,擅长管理包含非Python依赖(如数学运算库)的包。

对于数据分析,我的建议是:

  • 首选conda install来安装核心科学计算包,如numpy,pandas,scipy,matplotlib。Conda能确保这些包及其底层依赖的版本兼容性。
    conda install numpy pandas matplotlib
  • 如果conda仓库里没有某个小众的包,再用pip install作为补充。
  • 绝对不要混用,尤其是在同一个环境里,不要用pip和conda反复安装、卸载同一个包,容易导致环境混乱。

1.3 解决经典安装报错

根据搜索热词,这些错误很常见,其根源和处理思路如下:

  • error occurred when installing package ‘pandas’

    • 原因:通常是网络超时、依赖冲突或缺少编译环境。
    • 解决:
      1. 换用国内镜像源加速:pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
      2. 使用conda安装:conda install pandas
      3. 如果是在Linux/macOS上报错,可能需要安装编译工具(如gcc)。
  • AttributeError: module ‘numpy’ has no attribute ‘arange’

    • 原因:这通常是因为你的代码文件本身被命名为了numpy.py。当你在代码中写import numpy时,Python会优先导入当前目录下的这个numpy.py文件,而不是真正的numpy库。
    • 解决:立即把你的脚本文件名改成别的,比如data_analysis.py,然后删除同级目录下的numpy.py或pandas.py文件。
  • 版本冲突错误(如requires numpy~=1.0, but you have numpy 2.2.6)

    • 原因:某个包(如gradio)声明它依赖numpy的大版本是1.x,但你环境里装的是2.x,不兼容。
    • 解决:
      1. 为这个特定项目创建一个新的conda环境,并指定较低的Python版本(如3.9)和numpy版本。
      conda create -n my_project python=3.9 numpy=1.23 conda activate my_project # 然后再安装其他包
      1. 这是环境隔离优势的体现,不影响你其他项目使用新版本。

2. 理解数据分析的代码逻辑:不只是背语法

学Python语法不是为了考试,而是为了表达你的数据处理逻辑。对于数据分析,你需要重点掌握几种核心结构。

2.1 从“变量”和“数据类型”开始想问题

数据分析就是和“数据”打交道。在Python里,数据有不同的“盒子”(类型)来装。

  • 单个数据:用int(整数)、float(小数)、str(字符串)表示。
  • 一组数据:这是关键。list(列表)是最常用的有序集合,比如scores = [85, 90, 78, 92]。
  • 带标签的一组数据:dict(字典)让你可以用名字(键)来访问值,比如student = {“name”: “张三”, “score”: 85}。这在后续pandas的DataFrame中会大量用到。

写代码前,先想清楚:你的数据是一个个的数字,还是一组数字,还是每个数字都有名字?

2.2 循环:让计算机帮你重复劳动

while循环和for循环都是用来处理重复性工作的。在数据分析的初始数据清洗阶段,你可能会用到它们。

  • while循环:当某个条件为真时,一直执行。在数据分析中,直接用于处理数据数组的情况较少,因为它容易写成死循环。但它的逻辑很重要。

    # 示例:不断要求用户输入,直到输入‘quit’ user_input = “” data_list = [] while user_input.lower() != ‘quit’: user_input = input(“请输入一个数字(输入quit退出): “) if user_input.isdigit(): data_list.append(int(user_input)) print(“收集到的数据:”, data_list)

    这个例子展示了用循环来“收集”数据。但在真实数据分析中,数据通常来自文件,我们更多用for循环来遍历数据行。

  • for循环:对一个集合(如列表、字典)中的每个元素,执行一次操作。这是数据处理中最常见的循环。

    # 假设我们有一个原始数据列表,里面混入了非数字的‘缺失’标记 raw_data = [23, 45, ‘缺失’, 67, 89, ‘缺失’, 12] clean_data = [] for item in raw_data: if isinstance(item, (int, float)): # 判断item是否是整数或浮点数 clean_data.append(item) print(“清洗后的数据:”, clean_data) # 输出:[23, 45, 67, 89, 12]

    这就是一个最简单的数据清洗逻辑:遍历原始数据,把符合条件(是数字)的挑出来。

2.3 函数:封装你的数据处理“流水线”

当你有一段处理逻辑(比如上面的数据清洗)需要反复使用时,就应该把它写成函数。

def clean_numeric_data(data_list): “”” 清洗列表,只保留整数和浮点数。 参数: data_list: 包含各种类型数据的原始列表 返回: 只包含数值类型的新列表 “”” cleaned = [] for item in data_list: if isinstance(item, (int, float)): cleaned.append(item) return cleaned # 使用函数 raw_data1 = [1, 2, ‘a’, 3] raw_data2 = [‘x’, 10.5, 20, None] print(clean_numeric_data(raw_data1)) # [1, 2, 3] print(clean_numeric_data(raw_data2)) # [10.5, 20]

函数的好处是:一次定义,多处使用;逻辑清晰,易于修改。在复杂的数据分析脚本中,你会把数据读取、清洗、转换、分析等步骤都写成一个个函数。

3. 核心工具一:NumPy - 高速数值计算的基石

当你需要处理大量的数值数据(比如成千上万个数字)并进行数学运算时,Python原生的列表(list)会非常慢。NumPy(Numerical Python)就是为了解决这个问题而生的。它的核心是ndarray(N维数组),一个在连续内存中存储相同类型数据的对象,使得数学运算可以绕过Python的解释器,用底层C语言快速执行。

3.1 为什么是NumPy?从列表到数组

看一个简单的对比,计算两个大型列表中每个元素的平方:

import time import numpy as np # 使用Python列表 py_list = list(range(1, 1000001)) # 100万个元素的列表 start = time.time() py_result = [x**2 for x in py_list] print(f“Python列表耗时:{time.time() - start:.4f} 秒”) # 使用NumPy数组 np_array = np.arange(1, 1000001) # 创建NumPy数组 start = time.time() np_result = np_array ** 2 # 向量化运算,一行搞定 print(f“NumPy数组耗时:{time.time() - start:.4f} 秒”)

你会发现NumPy的速度有数量级的提升。这就是向量化运算的魅力:对整个数组执行操作,而无需显式编写循环。

3.2 必须掌握的NumPy核心操作

  1. 创建数组:

    import numpy as np # 从列表创建 arr1 = np.array([1, 2, 3, 4, 5]) # 创建特殊数组 zeros_arr = np.zeros((3, 4)) # 3行4列的全0数组 ones_arr = np.ones((2, 3)) # 2行3列的全1数组 range_arr = np.arange(0, 10, 2) # 类似range, [0, 2, 4, 6, 8] linspace_arr = np.linspace(0, 1, 5) # 0到1之间等间隔的5个数 [0., 0.25, 0.5, 0.75, 1.] random_arr = np.random.rand(3, 3) # 3x3的随机数组(值在0-1之间)
  2. 数组的属性与形状操作:

    arr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr.shape) # (2, 3) 形状:2行3列 print(arr.ndim) # 2 维度 print(arr.size) # 6 元素总数 print(arr.dtype) # int64 数据类型 # 改变形状(不改变数据顺序) arr_reshaped = arr.reshape(3, 2) # 变成3行2列
  3. 索引与切片(和列表类似,但功能更强):

    arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) print(arr[0, 1]) # 2, 第0行第1列 print(arr[1, :]) # [5, 6, 7, 8], 第1行所有列 print(arr[:, 2]) # [3, 7, 11], 所有行的第2列 print(arr[0:2, 1:3]) # [[2, 3], [6, 7]], 一个子区域
  4. 广播与通用函数:

    • 广播:允许不同形状的数组进行数学运算。NumPy会自动扩展较小的数组。
      arr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr + 10) # 标量10被广播到整个数组 print(arr * np.array([2, 2, 2])) # 一维数组[2,2,2]被广播到每一行
    • 通用函数:对数组执行元素级运算的函数,如np.sqrt(),np.exp(),np.sin(),np.log()。
  5. 聚合函数:对一组数据求统计值。

    arr = np.array([1, 2, 3, 4, 5]) print(np.sum(arr)) # 15,求和 print(np.mean(arr)) # 3.0,平均值 print(np.std(arr)) # 1.414...,标准差 print(np.min(arr), np.max(arr)) # 1, 5,最小最大值 # 对于二维数组,可以指定轴(axis) arr2d = np.array([[1, 2], [3, 4], [5, 6]]) print(np.sum(arr2d, axis=0)) # 按列求和 [9, 12] print(np.sum(arr2d, axis=1)) # 按行求和 [3, 7, 11]

3.3 NumPy实战:处理一组传感器读数

假设你有一组来自温度传感器的、带有一些异常值(噪声)的读数,你想计算平均温度并过滤掉明显不合理的值。

import numpy as np # 模拟传感器数据(包含两个异常值:-100和200) sensor_readings = np.array([22.5, 23.1, 21.8, -100, 22.9, 200, 23.0, 22.7]) # 1. 简单统计(此时会被异常值严重影响) print(“原始数据均值:”, np.mean(sensor_readings)) # 结果会失真 # 2. 数据清洗:利用布尔索引过滤 # 假设合理温度在0到50度之间 reasonable_mask = (sensor_readings >= 0) & (sensor_readings <= 50) clean_readings = sensor_readings[reasonable_mask] print(“合理数据:”, clean_readings) print(“清洗后均值:”, np.mean(clean_readings)) # 3. 更稳健的统计:中位数(对异常值不敏感) print(“原始数据中位数:”, np.median(sensor_readings))

这个例子展示了NumPy如何用简洁的语法完成数据筛选和计算,这是数据分析的基础。

4. 核心工具二:Pandas - 表格数据操作的核心

如果说NumPy是处理“纯数字矩阵”的利器,那么Pandas就是为处理“带标签的、异质的表格数据”而生的。它构建在NumPy之上,提供了Series(一维带标签数组)和DataFrame(二维表格,类似Excel)这两种核心数据结构,使得数据清洗、转换、分析和可视化变得极其高效。

4.1 理解DataFrame:你的核心工作区

DataFrame可以看作一个字典,其中每个键(列名)对应一个Series(列)。这是你90%的时间都在操作的对象。

import pandas as pd # 从字典创建DataFrame data = { ‘姓名’: [‘张三’, ‘李四’, ‘王五’], ‘年龄’: [25, 30, 35], ‘城市’: [‘北京’, ‘上海’, ‘广州’], ‘薪资’: [7000, 8500, 9000] } df = pd.DataFrame(data) print(df)

输出:

姓名 年龄 城市 薪资 0 张三 25 北京 7000 1 李四 30 上海 8500 2 王五 35 广州 9000

左边自动添加了索引(0,1,2),每一列都有明确的数据类型。

4.2 数据I/O:读进来,写出去

数据分析始于数据加载。Pandas支持多种格式。

# 读取CSV文件(最常用) df_csv = pd.read_csv(‘data.csv’) # 读取Excel文件(需要安装openpyxl或xlrd) # conda install openpyxl df_excel = pd.read_excel(‘data.xlsx’, sheet_name=‘Sheet1’) # 读取TXT文件(自定义分隔符) df_txt = pd.read_csv(‘data.txt’, sep=‘\t’) # 制表符分隔 # 将DataFrame保存为文件 df.to_csv(‘output.csv’, index=False) # index=False表示不保存行索引 df.to_excel(‘output.xlsx’, index=False)

读取文件时的常见问题:

  • 编码错误:如果文件包含中文,尝试指定编码pd.read_csv(‘data.csv’, encoding=‘utf-8’)或encoding=‘gbk’。
  • 分隔符问题:用sep参数指定,如sep=‘,’,sep=‘\t’,sep=‘\s+’(一个或多个空格)。
  • 跳过行/列:用skiprows跳过文件开头的行,用usecols选择要读取的列。

4.3 数据查看与基本信息

拿到数据后,不要急着分析,先“看”清楚。

df.head() # 查看前5行 df.tail(3) # 查看后3行 df.info() # 查看列名、非空值数量、数据类型(极其重要!) df.describe() # 对数值列进行快速统计(计数、均值、标准差、最小值、四分位数、最大值) df[‘年龄’].value_counts() # 查看‘年龄’列中每个值出现的次数 df.shape # (行数, 列数) df.columns # 列名列表 df.dtypes # 每列的数据类型

df.info()是你最好的朋友,它能立刻告诉你数据有多大、有没有缺失值、每列是什么类型。

4.4 数据选择与过滤

这是数据分析中最频繁的操作。

  1. 选择列:

    df[‘姓名’] # 选择单列,返回Series df[[‘姓名’, ‘年龄’]] # 选择多列,返回DataFrame
  2. 选择行(基于位置):

    df.iloc[0] # 选择第一行(按整数位置) df.iloc[0:3] # 选择第0,1,2行(切片) df.iloc[[0, 2]] # 选择第0行和第2行
  3. 选择行(基于标签或条件):

    df.loc[0] # 选择索引标签为0的行(默认索引就是整数,所以和iloc[0]结果一样) # 条件过滤(布尔索引) - 这是核心! df[df[‘年龄’] > 28] # 选择年龄大于28的行 df[(df[‘城市’] == ‘北京’) & (df[‘薪资’] > 7500)] # 多条件筛选(且) df[df[‘城市’].isin([‘北京’, ‘广州’])] # 选择城市是北京或广州的行

4.5 处理缺失值与重复值

真实数据很少是完美的。

# 检查缺失值 df.isnull() # 返回布尔DataFrame,显示每个单元格是否为空 df.isnull().sum() # 统计每列的缺失值数量 # 处理缺失值 # 1. 删除 df_dropna = df.dropna() # 删除任何包含缺失值的行 df_dropna_col = df.dropna(axis=1) # 删除任何包含缺失值的列 # 2. 填充 df_filled = df.fillna(0) # 用0填充所有缺失值 df_filled_mean = df[‘薪资’].fillna(df[‘薪资’].mean()) # 用该列均值填充 # 处理重复值 df.duplicated() # 标记重复行 df.drop_duplicates() # 删除重复行 df.drop_duplicates(subset=[‘姓名’]) # 根据‘姓名’列去重

4.6 数据转换与创建新列

经常需要基于已有列计算新指标。

# 简单运算创建新列 df[‘年薪’] = df[‘薪资’] * 12 # 使用apply函数进行更复杂的行级或列级运算 def salary_level(x): if x < 8000: return ‘初级’ elif x < 10000: return ‘中级’ else: return ‘高级’ df[‘薪资等级’] = df[‘薪资’].apply(salary_level) # 使用lambda表达式(简单函数) df[‘城市缩写’] = df[‘城市’].apply(lambda x: x[0]) # 取城市第一个字 # 替换特定值(热词中提到的问题) df[‘城市’].replace(‘北京’, ‘Beijing’, inplace=True) # 将‘北京’替换为‘Beijing’ # 更通用的,替换某列中的特定数值 df[‘年龄’].replace(35, 36, inplace=True) # 将年龄为35的替换为36

4.7 分组与聚合(GroupBy)

这是Pandas最强大的功能之一,用于“拆分-应用-合并”。

# 按‘城市’分组,并计算每组的平均薪资 grouped = df.groupby(‘城市’)[‘薪资’].mean() print(grouped) # 输出: # 城市 # 北京 7000 # 上海 8500 # 广州 9000 # 更复杂的聚合:一次计算多个统计量 agg_result = df.groupby(‘城市’).agg({ ‘薪资’: [‘mean’, ‘min’, ‘max’, ‘count’], ‘年龄’: ‘mean’ }) print(agg_result)

4.8 表格合并(Merge/Concat)

数据常常分散在多个表中,需要合并。

# 假设有另一个df2,包含员工的部门信息 df2 = pd.DataFrame({‘姓名’: [‘张三’, ‘李四’], ‘部门’: [‘技术部’, ‘市场部’]}) # 1. 类似SQL的JOIN操作 df_merged = pd.merge(df, df2, on=‘姓名’, how=‘left’) # 左连接,以df为基础 print(df_merged) # 2. 纵向拼接(行追加) df_new_row = pd.DataFrame({‘姓名’: [‘赵六’], ‘年龄’: [28], ‘城市’: [‘深圳’], ‘薪资’: [9500]}) df_appended = pd.concat([df, df_new_row], ignore_index=True) # ignore_index重置索引

4.9 Pandas实战:分析一份销售数据

假设你有一份sales_data.csv文件,包含日期、产品、销售额、数量、地区等字段。

import pandas as pd # 1. 加载数据 df = pd.read_csv(‘sales_data.csv’) print(“数据概览:”) print(df.info()) print(df.head()) # 2. 数据清洗 # 检查并处理缺失值 print(“缺失值统计:”) print(df.isnull().sum()) # 假设我们决定删除‘销售额’缺失的行 df_clean = df.dropna(subset=[‘销售额’]) # 3. 基础分析 # 总销售额和总销量 total_sales = df_clean[‘销售额’].sum() total_quantity = df_clean[‘数量’].sum() print(f“总销售额:{total_sales:.2f}, 总销量:{total_quantity}”) # 每个产品的总销售额 sales_by_product = df_clean.groupby(‘产品’)[‘销售额’].sum().sort_values(ascending=False) print(“\n产品销售额排名:”) print(sales_by_product.head()) # 4. 进阶分析:计算每个地区的平均订单价值(AOV) df_clean[‘订单价值’] = df_clean[‘销售额’] / df_clean[‘数量’] # 注意处理除零错误 aov_by_region = df_clean.groupby(‘地区’)[‘订单价值’].mean() print(“\n各地区平均订单价值:”) print(aov_by_region) # 5. 数据透视(类似Excel数据透视表) # 查看每个地区、每个产品的销售额总和 pivot_table = pd.pivot_table(df_clean, values=‘销售额’, index=‘地区’, columns=‘产品’, aggfunc=‘sum’, fill_value=0) print(“\n数据透视表(地区 vs 产品):”) print(pivot_table) # 6. 输出结果 # 将产品销售额排名保存到新文件 sales_by_product.to_csv(‘product_sales_ranking.csv’)

这个流程覆盖了从数据加载、清洗、基础统计、分组聚合到结果输出的完整数据分析链条。

5. 从脚本到项目:组织你的数据分析代码

当你掌握了基础语法和库的使用后,代码的组织就变得重要。不要把所有的代码都写在一个巨大的脚本里。

5.1 使用Jupyter Notebook进行探索

对于数据探索和初步分析,Jupyter Notebook是无与伦比的工具。它允许你以“单元格”为单位执行代码,并立即看到结果(表格、图表),非常适合交互式分析。

  • 安装:如果你安装了Anaconda,它已经自带了。也可以通过conda install jupyter安装。
  • 启动:在命令行进入你的项目目录,输入jupyter notebook。
  • 好处:可以分段执行,保留中间结果,混合代码、文字说明和图表。

5.2 使用PyCharm或VSCode进行开发

对于更正式、更复杂的分析项目,或者需要编写可复用的数据处理模块时,使用专业的集成开发环境(IDE)更好。

  • PyCharm:功能强大,对Python支持极好,但相对较重。
  • VSCode:轻量灵活,通过安装Python插件可以获得近乎IDE的体验,是目前非常流行的选择。
  • 环境配置:在IDE中,关键是指定正确的Python解释器(Interpreter)。选择你通过conda创建的环境中的python.exe,确保IDE使用的库和你命令行测试的库是同一套。

5.3 代码结构建议

一个简单的数据分析项目可以这样组织:

my_data_analysis_project/ ├── data/ # 存放原始数据和生成的数据 │ ├── raw/ # 原始数据,只读 │ └── processed/ # 处理后的数据 ├── notebooks/ # Jupyter Notebook文件,用于探索性分析 │ └── 01_data_exploration.ipynb ├── src/ # 源代码目录 │ ├── data_loader.py # 数据读取函数 │ ├── data_cleaner.py # 数据清洗函数 │ ├── analyzer.py # 分析逻辑函数 │ └── utils.py # 通用工具函数 ├── config.py # 配置文件(如路径、参数) ├── main.py # 主运行脚本 ├── requirements.txt # 项目依赖列表 └── README.md # 项目说明

在main.py中,你可以像搭积木一样调用各个模块的函数:

# main.py from src.data_loader import load_raw_data from src.data_cleaner import clean_data from src.analyzer import run_analysis def main(): raw_df = load_raw_data(‘data/raw/sales.csv’) clean_df = clean_data(raw_df) results = run_analysis(clean_df) results.to_csv(‘data/processed/final_results.csv’) print(“分析完成!”) if __name__ == ‘__main__’: main()

5.4 版本控制:使用Git

使用Git(如GitHub, Gitee)来管理你的代码和Notebook。这不仅能备份你的工作,还能记录每一次更改,方便回溯和协作。

  • 基础操作:git init,git add,git commit,git push。
  • 重要:在.gitignore文件中忽略不需要版本控制的文件,如data/,__pycache__/,.ipynb_checkpoints/以及IDE的配置文件。

6. 常见问题排查清单

当你代码跑不起来时,按这个顺序检查,能解决大部分问题:

  1. 环境与路径问题:

    • Python版本对吗?python --version
    • 是在正确的conda环境里吗?conda activate your_env_name
    • 需要的包安装了吗?pip list | grep pandas或conda list
    • 文件路径对吗?使用绝对路径或确保相对路径正确。import os; print(os.path.exists(‘your_file.csv’))
  2. 包导入问题:

    • 报错ModuleNotFoundError: No module named ‘numpy’:没安装,或不在当前Python环境。
    • 报错AttributeError(如之前提到的numpy.arange):检查是否有同名的.py文件干扰。
    • 版本冲突:创建新的干净环境重新安装。
  3. 数据读取问题:

    • pd.read_csv报编码错误:尝试encoding=‘utf-8’,‘gbk’,‘gb2312’,‘latin1’。
    • 数据读进来全是NaN或格式不对:检查分隔符sep,用df.head()和df.info()查看前几行和数据类型。
    • 内存不足:对于超大文件,使用chunksize参数分块读取。
  4. 数据处理问题:

    • 筛选数据没结果:检查条件语句是否正确,数据类型是否一致(比如字符串和数字比较)。
    • GroupBy或Pivot结果不对:检查作为分组键(by)或索引/列(index/columns)的列是否存在,值是否有误。
    • 新建列或赋值失败:确认DataFrame的索引是否一致,是否使用了正确的赋值方式(df.loc[…]=…)。
  5. 性能问题:

    • 循环处理DataFrame极慢:尽量避免用for循环遍历DataFrame行。优先使用Pandas的向量化操作(直接对列运算)、apply()函数,或者NumPy数组运算。
    • 内存占用高:考虑使用更高效的数据类型(如int32代替int64),及时删除不再需要的中间变量(del df_temp),或使用分块处理。

学习数据分析,最关键的不是记住每一个函数,而是理解“数据流动”的管道:从哪里获取数据(Load),怎么把它变干净(Clean),如何转换和计算(Transform/Model),最后怎样呈现和输出(Visualize/Present)。NumPy和Pandas是这个管道中“转换和计算”环节最核心的工具。一开始不用求全,把本文提到的创建、查看、筛选、分组、合并这几个操作练熟,你就能解决大部分基础的数据分析任务了。遇到新需求,再去查官方文档或搜索具体的函数用法,这样学习效率最高。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询