我的知识记录

Python pandas读取CSV教程:一行加载成DataFrame

用pandas的read_csv读取CSV文件,自动识别类型、处理表头、跳到指定列,适合数据分析和批量清洗场景,附完整代码。

场景痛点

拿到一份几千行的CSV,手动在Excel里点筛选、排序、统计很费时间,还容易误操作改错原表。pandas一行 read_csv 就能把整张表加载成DataFrame,后面随便筛选、聚合、导出,比Excel高效得多。

用到的库

pip install pandas

完整代码

# 用pandas读取CSV文件
import pandas as pd

def read_basic(file_path):
"""最基础的读法,自动推断列类型。"""
df = pd.read_csv(file_path, encoding="utf-8-sig")
print("形状(行,列):", df.shape)
print("列名:", list(df.columns))
print("前5行:")
print(df.head())
return df

def read_with_options(file_path):
"""常用参数组合:指定编码、只取需要的列、跳过空行、指定索引列。"""
df = pd.read_csv(
file_path,
encoding="utf-8-sig",      # 兼容Excel导出
usecols=["姓名", "年龄", "城市"],  # 只读这三列,省内存
dtype={"年龄": "Int64"},   # 把年龄当整数读,允许缺失
skip_blank_lines=True,     # 跳过空行
)
print(df.info())
print(df.describe(include="all"))
return df

def read_big_file(file_path):
"""
超大CSV分块读,每次只读10万行,避免内存爆掉。
真正的大数据场景看chunksize那篇。
"""
chunks = []
for chunk in pd.read_csv(file_path, chunksize=100000, encoding="utf-8-sig"):
chunks.append(chunk)
df = pd.concat(chunks, ignore_index=True)
print(f"分块读取完成,共 {len(df)} 行")
return df

def main():
file_path = "data.csv"

print("=== 基础读取 ===")
df = read_basic(file_path)

print("\n=== 带参数读取 ===")
df2 = read_with_options(file_path)

print("\n=== 分块读取(演示用,可按需打开)===")
# df3 = read_big_file(file_path)

if __name__ == "__main__":
main()

代码讲解

  • pd.read_csv() 一行搞定,自动处理表头、逗号、引号转义。
  • usecols 只读需要的列,几十列的大表能省一半内存。
  • dtype 强制指定类型,避免pandas把编号、手机号当成浮点。
  • chunksize 返回迭代器,每次给你一个小块DataFrame,适合GB级文件。
  • df.info() 看每列非空数量和类型,df.describe() 看数值列统计。

运行结果

控制台打印表的行列数、列名、前5行样例、字段类型信息。数据加载进内存后,后续想 df[df["年龄"]>30] 筛选、df.groupby("城市").count() 分组统计都直接可用。

注意事项

  • 编码乱码就把 encoding 换成 "gbk""gb18030"
  • 没有表头的CSV加 header=None,再用 names=["列1","列2"] 指定列名。
  • 分隔符不是逗号(比如分号、制表符)就加 sep=";"sep="\t"
  • pandas 2.x 对中文列名和UTF-8支持很好,建议保持较新版本。

Python pandas读取CSV教程:一行加载成DataFrame

标签:

更新时间:2026-09-14 20:57:05

上一篇:Python pandas读写SQLite数据库教程

下一篇:Python pandas分组聚合groupby实战