查看全课大纲(第 10 / 101 节)
  1. 1.数据分析基本概念
  2. 2.学习数据分析的一般路线
  3. 3.数据分析的流程
  4. 4.数据类型
  5. 5.环境部署(1)
  6. 6.环境部署(2)
  7. 7.课程介绍
  8. 8.TXT文件操作
  9. 9.JSON文件操作
  10. 10.CSV文件操作
  11. 11.Excel文件操作
  12. 12.数据库及SQL常用语法
  13. 13.数据库基本操作
  14. 14.数据库多表连接
  15. 15.实战:欧洲职业足球数据库分析
  16. 16.爬虫简介
  17. 17.URL管理模块
  18. 18.网页下载模块
  19. 19.网页解析模块(1)
  20. 20.网页解析模块(2)
  21. 21.Scrapy简介
  22. 22.Scrapy使用步骤(1)
  23. 23.Scrapy使用步骤(2)
  24. 24.Scrapy使用步骤(3)
  25. 25.Scrapy使用步骤(4)
  26. 26.实战:获取国内城市空气质量指数数据
  27. 27.NumPy和SciPy介绍
  28. 28.多维数组
  29. 29.多维数组操作
  30. 30.NumPy的常用方法
  31. 31.向量化介绍
  32. 32.向量化及通用函数
  33. 33.实战:2016美国大选分析
  34. 34.数据结构-Series
  35. 35.数据结构-DataFrame
  36. 36.数据结构-Index
  37. 37.Series的索引操作
  38. 38.DataFrame的索引操作
  39. 39.索引操作总结
  40. 40.运算与对齐
  41. 41.函数应用操作(1) -- map
  42. 42.函数应用操作 (2) -- apply applymap
  43. 43.文件读写操作
  44. 44.排序操作
  45. 45.数据清洗--处理缺失数据
  46. 46.数据清洗--处理重复数据
  47. 47.数据清洗--替换数据
  48. 48.常用统计方法(1) -- describe quantile
  49. 49.常用统计方法(2) -- sum mean median count
  50. 50.常用统计方法(3) -- max min idxmax idxmin
  51. 51.常用统计方法(4) -- mad var std cumsum
  52. 52.实战:全球食品数据分析
  53. 53.层级索引
  54. 54.分组与聚合介绍
  55. 55.分组操作(1) -- GroupBy对象及常用聚合操作
  56. 56.分组操作(2) -- 自定义分组及聚合操作
  57. 57.透视表介绍
  58. 58.透视表操作
  59. 59.数据规整(1) -- 数据合并concat
  60. 60.数据规整(2) -- 数据连接merge
  61. 61.数据重构(3) -- 数据重构stack unstack
  62. 62.实战:互联网电影资料库分析
  63. 63.探索性数据分析EDA介绍
  64. 64.EDA的目的
  65. 65.EDA常用工具
  66. 66.Matplotlib绘图基本介绍
  67. 67.Matplotlib画布
  68. 68.散点图和柱状图的绘制
  69. 69.直方图的绘制
  70. 70.矩阵绘图
  71. 71.子图的使用
  72. 72.Matplotlib颜色、标记、线型
  73. 73.Matplotlib坐标刻度、标签、图例、标题
  74. 74.Seaborn介绍
  75. 75.数据集分布可视化(1) -- 单变量分布、双变量分布
  76. 76.数据集分布可视化(2) -- 变量关系可视化
  77. 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
  78. 78.交互式数据可视化工具Bokeh介绍
  79. 79.Bokeh绘制散点图、柱状图、盒子图、弦图
  80. 80.Bokeh绘制常用图形元素
  81. 81.3D绘图 -- mplot3d
  82. 82.3D曲线可视化
  83. 83.3D散点图可视化
  84. 84.3D柱状图可视化
  85. 85.Pandas绘图
  86. 86.实战:Lending Club借贷数据探索性分析及可视化
  87. 87.机器学习介绍及应用场景
  88. 88.机器学习建模介绍 (1) -- 分类
  89. 89.机器学习建模介绍 (2) -- 回归
  90. 90.机器学习建模介绍 (3) -- 聚类
  91. 91.机器学习分类
  92. 92.机器学习工具scikit-learn
  93. 93.使用scikit-learn的流程
  94. 94.数据集准备及划分
  95. 95.模型选择
  96. 96.数据预处理及特征工程
  97. 97.过拟合与欠拟合
  98. 98.模型调参介绍
  99. 99.模型调参方法
  100. 100.模型测试及评价
  101. 101.实战:通过移动设备行为数据预测性别和年龄

CSV文件操作

约 12 分钟

📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)

小象实战讲义 · Python数据分析实战

在上一节我们学习了JSON数据的处理,这一节我们来学习另一种非常常见的表格型数据格式——CSV。CSV文件是数据分析中最常用的数据交换格式之一,掌握它的读写操作是数据分析师的基本功。本节将重点介绍如何使用pandas库高效地读写CSV文件,并初步了解DataFrame数据结构。

💡 核心导读

  • CSV文件是以逗号分隔的纯文本表格数据格式
  • pandas库的read_csv()和to_csv()是处理CSV的核心方法
  • DataFrame是pandas中表示二维表格数据的主要数据结构
  • 读取CSV时会自动创建行索引,写入时可通过index=False控制是否保存索引列

什么是CSV文件

CSV(Comma-Separated Values,逗号分隔值)是一种以纯文本形式存储的表格型数据格式。正如其名,CSV文件使用逗号作为字段之间的分隔符。

从文件结构上看,CSV文件通常具有以下特点:

  • 第一行通常是列名(表头)
  • 每一行代表一条记录
  • 每一列代表一个字段
  • 字段之间用逗号分隔

虽然CSV文件可以用文本编辑器直接查看和编辑,但它与Excel等电子表格软件兼容性很好,可以直接用Excel打开查看。不过,当我们需要在Python中处理CSV数据时,直接使用文本操作的方式会比较繁琐,而pandas库提供了更加便捷高效的方法。

使用pandas读写CSV文件

pandas是Python数据分析的核心库,它专门为处理表格型数据而设计。对于CSV文件,pandas提供了read_csv()和to_csv()这两个核心方法,分别用于读取和写入CSV文件。

读取CSV文件

让我们先来看一个完整的读取CSV文件的示例:

import pandas as pd

# 创建一个简单的CSV数据(模拟从文件读取)
csv_data = """category,item,serving_size,calories
breakfast,egg muffin,136g,300
breakfast,blueberry muffin,120g,320
lunch,big mac,200g,540
lunch,french fries,150g,380
beverage,coca cola,500ml,210"""

# 将字符串数据转换为DataFrame(模拟read_csv)
from io import StringIO
df = pd.read_csv(StringIO(csv_data))

# 查看数据类型
print("数据类型:", type(df).__name__)
数据类型: DataFrame

pd.read_csv()方法返回的是一个DataFrame对象,这是pandas中最重要的数据结构,用于表示二维的表格型数据。DataFrame有行和列两个维度:

  • 行索引(index):默认从0开始的整数序列,用于标识每一行
  • 列名(columns):从CSV文件的第一行读取,用于标识每一列

查看数据内容

读取数据后,我们通常需要先查看一下数据的基本情况:

# 重新创建DataFrame以确保自包含
import pandas as pd
from io import StringIO

csv_data = """category,item,serving_size,calories
breakfast,egg muffin,136g,300
breakfast,blueberry muffin,120g,320
lunch,big mac,200g,540
lunch,french fries,150g,380
beverage,coca cola,500ml,210"""

df = pd.read_csv(StringIO(csv_data))

# 预览前3行数据
print("数据预览(前3行):")
print(df.head(3))
数据预览(前3行):
    category              item serving_size  calories
0  breakfast        egg muffin         136g       300
1  breakfast  blueberry muffin         120g       320
2      lunch           big mac         200g       540

head()方法默认显示前5行数据,我们也可以指定显示的行数。从输出中可以看到,pandas自动为数据添加了行索引(最左边的0、1、2…),而列名则来自CSV文件的第一行。

访问DataFrame中的数据

读取CSV文件后,我们经常需要访问其中的特定列或多列数据。pandas提供了非常直观的访问方式。

获取单列数据

要获取DataFrame中的单列数据,可以使用列名作为键,就像访问字典一样:

# 重新创建DataFrame
import pandas as pd
from io import StringIO

csv_data = """category,item,serving_size,calories
breakfast,egg muffin,136g,300
breakfast,blueberry muffin,120g,320
lunch,big mac,200g,540
lunch,french fries,150g,380
beverage,coca cola,500ml,210"""

df = pd.read_csv(StringIO(csv_data))

# 获取名为'item'的单个列
item_series = df['item']
print("类型:", type(item_series).__name__)
print("\n数据:")
print(item_series)
类型: Series

数据:
0          egg muffin
1    blueberry muffin
2             big mac
3        french fries
4           coca cola
Name: item, dtype: str

单列数据返回的是一个Series对象,这是pandas中表示一维带标签数据的数据结构。从输出中可以看到,Series也包含索引(0-4)和具体的数值。

获取多列数据

如果需要同时获取多列数据,可以将列名放在一个列表中:

# 重新创建DataFrame
import pandas as pd
from io import StringIO

csv_data = """category,item,serving_size,calories
breakfast,egg muffin,136g,300
breakfast,blueberry muffin,120g,320
lunch,big mac,200g,540
lunch,french fries,150g,380
beverage,coca cola,500ml,210"""

df = pd.read_csv(StringIO(csv_data))

# 获取'item'和'calories'两列数据
selected_columns = df[['item', 'calories']]  # 注意是双重括号
print("类型:", type(selected_columns).__name__)
print("\n数据:")
print(selected_columns)
类型: DataFrame

数据:
               item  calories
0        egg muffin       300
1  blueberry muffin       320
2           big mac       540
3      french fries       380
4         coca cola       210

获取多列数据时,返回的仍然是DataFrame对象,但只包含我们选择的列。注意语法上的区别:单列使用df['列名'],多列使用df[['列名1', '列名2']](双括号)。

写入CSV文件

将处理后的数据保存为CSV文件是数据分析中常见的需求。pandas提供了to_csv()方法来实现这一功能。

基本写入操作

# 创建要保存的数据
import pandas as pd

data = {
    'product': ['A', 'B', 'C', 'D'],
    'quantity': [10, 25, 15, 30],
    'price': [100, 200, 150, 250]
}
sales_df = pd.DataFrame(data)

print("要保存的数据:")
print(sales_df)
要保存的数据:
  product  quantity  price
0       A        10    100
1       B        25    200
2       C        15    150
3       D        30    250

保存到CSV文件

在实际应用中,我们会使用to_csv()方法将DataFrame保存为CSV文件。这里我们演示方法的使用,但不在代码中实际创建文件:

# 演示to_csv的使用方法
import pandas as pd

# 创建示例数据
data = {
    'product': ['A', 'B', 'C', 'D'],
    'quantity': [10, 25, 15, 30]
}
sales_summary = pd.DataFrame(data)

print("数据内容:")
print(sales_summary)
print("\n保存方法示例: sales_summary.to_csv('sales_summary.csv', index=False)")
数据内容:
  product  quantity
0       A        10
1       B        25
2       C        15
3       D        30

保存方法示例: sales_summary.to_csv('sales_summary.csv', index=False)

重要参数:index

在写入CSV文件时,index参数非常重要。默认情况下,index=True,这意味着DataFrame的行索引会被写入CSV文件中作为第一列。但在很多情况下,我们并不需要保存这些自动生成的索引,这时可以设置index=False。

为什么要注意index参数?

  • 当index=True(默认)时:CSV文件会多出一列数字(0, 1, 2…)
  • 当index=False时:只保存实际的数据列,文件更加简洁

在实际工作中,大多数情况下我们都会使用index=False,除非行索引本身包含重要信息。

查看CSV文件的原始格式

虽然我们通常用Excel或pandas查看CSV文件,但了解其原始格式也很有帮助。CSV文件的本质是纯文本文件,可以用任何文本编辑器打开。在文本编辑器中,你会看到类似这样的内容:

category,item,serving_size,calories
breakfast,egg muffin,136g,300
breakfast,blueberry muffin,120g,320
lunch,big mac,200g,540

这就是CSV文件的真实面貌——简单的逗号分隔文本。许多文本编辑器还提供了CSV高亮插件,可以用不同颜色显示不同的列,使数据更易读。

📝 动手练一练

  1. 概念辨析:CSV文件和Excel文件有什么主要区别?在什么情况下你会选择使用CSV格式?
👉 点击查看参考答案

主要区别:

  • 格式本质:CSV是纯文本格式,Excel是二进制格式(.xlsx)或复合文档格式(.xls)
  • 兼容性:CSV几乎被所有数据处理工具支持,Excel文件需要特定库或软件
  • 功能:CSV只存储数据,Excel可以存储公式、格式、图表等
  • 文件大小:相同数据量下,CSV通常更小

选择CSV的情况:

  • 需要在不同系统或工具间交换数据时
  • 数据不需要复杂格式或公式时
  • 需要人类可读的简单数据存储时
  • 处理大量数据且关注I/O性能时
  1. 代码实践:假设你有一个包含学生成绩的DataFrame,如何只保存”姓名”和”总分”两列到CSV文件,且不包含索引列?请写出关键代码。
👉 点击查看参考答案
import pandas as pd

# 创建示例数据
data = {
    '姓名': ['张三', '李四', '王五'],
    '数学': [85, 92, 78],
    '英语': [88, 85, 90],
    '物理': [76, 88, 82],
    '总分': [249, 265, 250]
}
df = pd.DataFrame(data)

# 选择需要的列并保存
selected_data = df[['姓名', '总分']]
# 实际保存代码(这里只展示方法):
# selected_data.to_csv('学生成绩汇总.csv', index=False)

print("要保存的数据:")
print(selected_data)
print("\n保存命令: selected_data.to_csv('学生成绩汇总.csv', index=False)")
要保存的数据:
   姓名   总分
0  张三  249
1  李四  265
2  王五  250

保存命令: selected_data.to_csv('学生成绩汇总.csv', index=False)

本章小结

本节我们学习了CSV文件的基本操作,这是数据分析中最基础也是最重要的技能之一。通过pandas库,我们可以轻松地读写CSV文件,进行数据的提取和保存。

📋 行动清单

  • 尝试用文本编辑器打开一个CSV文件,观察其原始格式
  • 使用pandas读取一个CSV文件,并用head()方法查看前几行数据
  • 练习从DataFrame中提取单列和多列数据
  • 创建一个简单的DataFrame,并使用to_csv()方法保存,注意体验index参数的不同效果

掌握CSV文件的读写是数据分析的第一步,在后续课程中,我们将深入学习pandas的更多功能,包括数据清洗、转换、分析和可视化。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 本节课件:CSV文件操作
    PDF · 192KB
    下载
  • 全套课件打包(第1-5章)
    ZIP · 12.8MB
    下载
  • 全套课件打包(第6-8章)
    ZIP · 15MB
    下载
  • 实战数据集:AppleStore 应用商城分析
    ZIP · 329KB
    下载
  • 实战数据集:女性服装电商分析
    ZIP · 2.8MB
    下载
  • Python 数据分析环境搭建指南
    PDF · 2MB
    下载
  • Scrapy 安装教程
    PDF · 12.7MB
    下载
  • 附加实战项目:AppleStore 应用商城数据分析
    ZIP · 0.3MB · ipynb + CSV 数据
    下载
  • 附加实战项目:银行电话营销数据分析
    ZIP · 0.4MB · ipynb + CSV 数据
    下载
  • 附加实战项目:女性服装电商评论数据分析
    ZIP · 2.7MB · ipynb + CSV 数据
    下载
  • 附加实战项目:美国化学学会杂志数据分析
    ZIP · 34.2MB · ipynb + SQLite 数据库
    下载