csv两种数据写入读取方法(numpy&pandas)(追加行列)
程序员文章站
2022-05-13 12:48:34
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
- 多维数组与矩阵运算
- Numpy 官网 http://www.numpy.org/
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)
- 还可以用
csv
模块读写,参考官网https://www.python.org/dev/peps/pep-0305/
本文地址:https://blog.csdn.net/weixin_45570921/article/details/107484196