欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

csv两种数据写入读取方法(numpy&pandas)(追加行列)

程序员文章站 2022-12-31 07:58:02
numpy、pandas写入读取csv,以及追加写入的一些问题...


  • .csv:逗号分隔值文件格式

  • 列表、数组和矩阵

    In [1]: a = [[1,2,3],[4,5,6]]  
    
    In [2]: a
    Out[2]: [[1,2,3],[4,5,6]]      # 列表嵌套
    
    In [3]: import numpy as np
    In [4]: np.array(a)
    Out[4]: array([[1,2,3],
                   [4,5,6]])       # 数组
               
    In [5]: np.mat(a)
    Out[5]: matrix([[1,2,3],
                    [4,5,6]])      # 矩阵
                    
    # 若列表内元素纬度不同
    In [6]: np.array([[1, 2, 3], [4, 5]])
    Out[6]: array([list([1, 2, 3]), list([4, 5])], dtype=object)
    
  • 相对列表,数组矩阵可以减少代码冗余,提高速度

  • 下文中的filename中的文件后缀为.csv


方法一:numpy

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
# 写入
np.savetxt("file_name",a,delimiter=",") 
# 读取
np.loadtxt("file_name",delimiter=",")

注意

  • 文件所在路径要存在,文件可以不存在
  • 读取的数据为数组类型
  • 如果要使用numpy处理,且列表内元素维度不同,可以用类似下面方法处理,或者用下面的方法二
# a为列表
def fill(a):
  lens = []
  for i in range(len(a)):
      lens.append(len(a[i]))
  for i in range(len(a)):
      while len(a[i]) != max(lens):
          a[i].append(float("inf"))
  return a
# 输出为[[1,2,3],[4.5,inf],[6,inf,inf]]
  • 只能保存数组数据,如果你得到的数据是内容单一的数组,写入也不需要什么其他标题,就可以用numpy,方便一点

方法二:pandas

  • pandas 官网 https://pandas.pydata.org/docs/index.html
  • pandas的功能比较多,可以对数据的横纵列加标题,也可以没有numpy那样的维度限制,也可以写入除数字以外的字符串,简单应用如下
    import pandas as pd
    col_name = ["number","letter"]
    data = [[1,"a"],[2,"b"],[3,"c"]]
    
    # 创建
    f = pd.DataFrame(columns=col_name,data=data)
    # 或者用字典格式
    # data = {"number":[1,2,3],"letter":["a","b","c"]}
    # f = pd.DataFrame(data)
    
    # 保存
    f.to_csv("file_name",index=False)
    
    # 读取
    info = pd.read_csv("file_name")
    num = info["number"].tolist()
    
    # 追加写入列
    info["new_col"] = [4,5,6]
    info.to_csv("file_name",index=False)
    
    # 追加写入第i+1行
    # 列索引所在的第一行不包括在行数内
    info.loc[i] = [7,8,9]
    info.to_csv("file_name",index=False)
    

注意

  • 追加行时,列数要和原数据的列数匹配

  • 追加列时,行数为原数据最大行数

  • data字典格式写入时,数组长度需要相同,按列表格式写入时,列表内元素长度可以不同,但最终的行数是相同的

  • 追加行时,如果loc[i]中,第i+1大于表格中最大的有数据的行,则自动追加到表格中最后有数据的一行的下一行

  • 如果想按列写入不同长度(即不同行数)的数据,可以按下面方式

    # 先按行写入再转置
    
    # 行索引
    index = ["num_1","num_2","num_3"]
    # 三行数据,每行不同列
    data = [[1,2,3,4,5],[6,7,8],[9]]
    f = pd.DataFrame(index=index,data=data)
    # 转置写入
    f.T.to_csv("file_name",index=False)
    

本文地址:https://blog.csdn.net/weixin_45570921/article/details/107484196

相关标签: python numpy