读写csv数据和Excel数据方法(pandas、numpy、csv、openpyxl库)


所总结的方法基于个人使用过的方法,各库的读写还有其他方法,依各人使用情况和习惯选择

1 CSV数据读写

1.1 介绍

  • 逗号分隔值(Comma-Separated Values,CSV),其文件以纯文本形式存储表格数据(数字和文本),文件的每一行都是一个数据记录。
  • 可用python库:pandas,numpy,csv。(本人常结合使用前两种库和处理Excel数据的库)
CSVExcel
纯文本格式,用逗号分隔一系列值二进制文件
只是一个文本文件,用于存储数据,但不包含格式,公式,宏等。也被称为平面文件可以存储数据,可以对数据进行操作
.csv.xls或.xlsx
可以用Windows中的任何文本编辑器打开,如记事本,vscode等只能用Microsoft Excel文档打开,不能被文本编辑器打开或编辑
任何编程语言来解析CSV数据非常容易用于解析Excel数据的编程语言库通常会更大,更慢,更复杂

1.2 pandas

1.2.1 安装
pip install pandas
# 非终端
!pip install pandas
1.2.2 读取
import pandas as pd

df = pd.read_csv(fileName)

# 按行读取(数据部分的i行至j-1行数据)
lines = df.iloc[i:j]

# 按列读取
# 1、读取列索引字段为"title"的数据
col = df["title"].tolist()
# 2、加载文件时直接获取某列或某些列
file = pd.read_csv(filename, usecols=["col1Name", "col2Name"])

# 获取某一值,以下两种都可(读取title列的第i+1个数据)
val = df["tilte"][i]
val = df["title"].tolist()[i]
1.2.3 写入
# 字典格式
data = {
    "name": ["Jason", "Molly", "Tina", "Jake", "Amy"],
    "age": [31, 23, 19, 28, 18],
    "score": [98, 76, 84, 79, 92]
}
# (colums参数默认值为dic的key)
df = pd.DataFrame(data, columns = ["name", "age", "score"], index = ["n1","n2","n3","n4","n5"])

# 列表格式
list = [["Jason", "Molly", "Tina", "Jake", "Amy"],
        [15, 19, 10, 24, 21],
        [78, 84, 71, 89, 93]
]
df = pd.DataFrame(dic, columns = ["name", "age", "score"], index = ["n1","n2","n3","n4","n5"])
1.2.4 保存
df.to_csv(filename)
# 转置后保存
df.T.to_csv(filename)

注意

  • 使用字典数据时,columns列索引默认为字典的键key,可以指定其他列索引值,若无对应的数据,则写入时该列的值为Nan
  • 写入不需要行索引时,在df.to_csv()中添加参数index = False
  • 列表数据按行写入,字典数据按列写入,若各组数据数量不同,字典数据格式无法写入,列表数据格式仍按行写入,且从左往右写入,空值在右侧,需判断是否需要转置"df.T"保存,Excel中有16384列x1048576行,使用转置并使用Excel打开时,需要注意行列数,以防丢失数据
  • 读取文件时报错'utf-8' codec can't decode byte 0xb1 in position 0: invalid start byte,记事本打开,另存为utf-8格式文件,或用其他正确的编码格式打开文件

1.3 numpy

1.3.1 介绍
  • 用Python进行科学计算的基础软件包
  • 一个运算速度非常快的一个数学库
  • 进行向量和矩阵计算
1.3.2 读取写入
  • 因为是处理数组矩阵,所以读写较为便捷
import numpy as np

data = [[1,2,3,4],[4,5,6,7]]
# 写入
np.savetxt(filename, data, delimiter = ",")

# 读取
data = np.loadtxt(filename, delimiter = ",")
# (按字符串读取)
data = np.loadtxt(filename, str, delimiter = ",")

# 其他功能(读取时跳过第一行数据)
data = np.loadtxt(filename, delimiter = ",", skiprows = 1)

注意

  • 写入时只能为float格式数据,读取时可以按字符串格式读取,然后再按需求转换数据格式
  • 若列表嵌套内各列表元素数量不同,需要先用数值补齐(比如用float("inf")),或用pandas处理数据

1.4 csv

import csv
       
data = [[1,2,3],[4,5,6]]
    
# 写入
with open(filename,"a", newline = "") as csvfile:
    cw = csv.writer(csvfile, delimiter = ",")
    for row in data:
	    cw.writerow(row)
    
# 读取
with open(filename, "r", newline = "") as csvfile:
    rows = csv.reader(csvfile, delimiter=",")
    for row in rows:
	    print(row)
        # print(",".join(row))

注意

  • 读取为字符串格式

2 Excel数据读写

2.1 写入

import openpyxl

# 写入的数据
data = [[1,2,3],[4,5,6],[7,8,9]]

# 创建工作表
wb = openpyxl.Workbook()
# 获取激活的工作簿
ws = wb.active

# 循环写入(先循环行后循环列)
for i,d in enumerate(data):
    for j,dd in enumerate(d):
        ws.cell(row = i+1, column = j+1).value = dd

# 颜色填充

from openpyxl.styles import PatternFill

fill = PatternFill('solid', fgColor='FFBB00')
Ws.cell(row = 1, column = 1).fill = fill
        
# 保存
wb.save(filename)

2.2 读取

# 获取工作表
wb = load_workbook(filename)
# 获取所有工作簿名称
sheets = wb.sheetnames
# 获取第一个名称对应的工作簿
ws = wb[sheets[0]]

# 获取单元格的值
d = ws.cell(row = 1, column = 1).value

注意

  • 读写Excel数据时,以行列循环嵌套为主,读写逻辑十分简单,但for循环嵌套的代码逻辑要清晰
  • 读写csv数据时,以整行整列或整体数据为主,读写逻辑相比Excel数据读写稍微复杂一点但也容易,代码语句也简单易读易写
  • 参考链接
    Excel和CSV格式文件的不同之处
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值