文章目录
- 1 csv的生成, 保存和读取
- 2 csv的列 增删改查
- 3 csv的行 查增删改
- 4 csv的一些算法
- 算法一 根据索引得到新的数据集
- 算法二 csv+csv
- 算法三 csv+csv改进版本
- 算法四 根据索引重新排序整个csv
- 算法五 判断为空
- 算法六 判断某个值的存在性
注意
- np.set_printoptions(threshold=np.inf) #最大数显示
- 小数点规定好
df = pd.read_csv("data.csv", float_precision="round_trip")
1 csv的生成, 保存和读取
import csv
import pandas as pd
# 保存csv
data1 = [i for i in range(250)]
data2 = [i*1.25 for i in range(250)]
data4 = [0 for _ in range(250)]
# 方法1, 数组list保存成csv或者dataFrame格式
data_ = [[1,2], [1,2], [1,2]]
title = ["第一列", "第二列"]
csv = pd.DataFrame(data_, columns=title )
# 方法2, 字典格式保存
csv = pd.DataFrame({"data1":data1,
"data2":data2,
"data4":data4})
csv.to_csv("data.csv", index=True) # index一般为False
# 读取csv
csv = pd.read_csv("data.csv")
print(csv.head(2)) # 读取前两行数据
print(csv.tail(2)) # 读取最后两行
print(csv.columns.values) # 读取key
print(csv["data1"].values[0:10]) # 读取key为data1 的前10个数据
print(len(csv)) # 读取csv长度
# 读取指定列
csv = pd.read_csv("data.csv", usecols=["data2", "data1"])
print(csv.head(2)) # 读取前两行数据
Unnamed: 0 data1 data2 data4
0 0 0 0.00 0
1 1 1 1.25 0
Unnamed: 0 data1 data2 data4
248 248 248 310.00 0
249 249 249 311.25 0
['Unnamed: 0' 'data1' 'data2' 'data4']
[0 1 2 3 4 5 6 7 8 9]
250
data1 data2
0 0 0.00
1 1 1.25
2 csv的列 增删改查
csv = pd.read_csv("data.csv")
# 增列 df.insert(5,'typeSmallSmall','')
csv.insert(1,"data_insert", [1 for i in range(250)]) # 在第一列后面插入全部为1的列
print(csv.head(2))
# 删列 df.drop()
csv.drop(['data_insert'], axis=1, inplace=True)
print(csv.head(2))
# 对某列求和
print(csv["data1"].sum()) # 求和
# 替换列标签
csv.rename(columns={"data1":"data_111", "data2":"data_222"}, inplace = True)
print(csv.head(2))
Unnamed: 0 data_insert data1 data2 data4
0 0 1 0 0.00 0
1 1 1 1 1.25 0
Unnamed: 0 data1 data2 data4
0 0 0 0.00 0
1 1 1 1.25 0
31125
Unnamed: 0 data_111 data_222 data4
0 0 0 0.00 0
1 1 1 1.25 0
3 csv的行 查增删改
csv = pd.read_csv("data.csv")
print(csv.head(3))
# 查-读取第一行数据, 这不包含head
print(csv.loc[1])
# 删除行
csv.drop(csv.index[1],inplace=True) # 删除第一行
print(csv.head(3))
# 增加某一行请看下面算法一,或者下图
# 修改某一行
csv.loc[1] = [26,25,6,9]
print("前五行/n",csv.head(5))
print("打印第2行")
print(csv.loc[2])
# 也可以在最后一行插入一条数据
csv.loc[len(csv)]=[4,'d']
csv.to_csv(filename,index=None)
# 删除重复行数据
csv.drop_duplicates("data4", inplace=True) # 删除"data4"中的重复数据
print(csv.head(5))
print("当前csv的长度", len(csv))
Unnamed: 0 data1 data2 data4
0 0 0 0.00 0
1 1 1 1.25 0
2 2 2 2.50 0
Unnamed: 0 data1 data2 data4
0 0 0 0.00 0
2 2 2 2.50 0
3 3 3 3.75 0
前五行/n Unnamed: 0 data1 data2 data4
0 0 0 0.00 0
2 2 2 2.50 0
3 3 3 3.75 0
4 4 4 5.00 0
5 5 5 6.25 0
打印第2行
Unnamed: 0 2.0
data1 2.0
data2 2.5
data4 0.0
Name: 2, dtype: float64
Unnamed: 0 data1 data2 data4
0 0 0 0.0 0
1 26 25 6.0 9
当前csv的长度 2
4 csv的一些算法
算法一 根据索引得到新的数据集
- (该算法的加强版见算法四)
import pandas as pd
import os, sys
find_data = pd.read_csv(r"data.csv") # 大数据池子
index_data = [1,5,6,7] # 需要找的数据索引 [1,5,6,7]
get_index = []
for i, f in enumerate(find_data["data1"].values):
if f in index_data:
get_index.append(find_data.iloc[i])
print("找到了啊")
# fd = pd.DataFrame(get_index)
# fd.to_csv("res.csv")
print(get_index)
找到了啊
找到了啊
找到了啊
找到了啊
[Unnamed: 0 1.00
data1 1.00
data2 1.25
data4 0.00
Name: 1, dtype: float64, Unnamed: 0 5.00
data1 5.00
data2 6.25
data4 0.00
Name: 5, dtype: float64, Unnamed: 0 6.0
data1 6.0
data2 7.5
data4 0.0
Name: 6, dtype: float64, Unnamed: 0 7.00
data1 7.00
data2 8.75
data4 0.00
Name: 7, dtype: float64]
算法二 csv+csv
import numpy as np
import pandas as pd
import os
data = pd.read_csv("4873(1).csv")
print(data.columns.values)
data2 = pd.read_csv("6208.csv")
print(data2.columns.values)
index_given = list(data["index"].values) + list(data2["index_given"].values)
transfer = list(data["transfer"].values) + list(data2["transfer"].values)
fd = pd.DataFrame({
"index_given" :index_given ,
"transfer" :transfer ,
})
fd.to_csv("add.csv")
算法三 csv+csv改进版本
import os
import pandas as pd
import glob
platform = "xxxx"
# 如果数据保存路径存在, 则删除
out_file = f"save.csv"
if os.path.exists(out_file):
os.remove(out_file)
print("保存路径以清除")
# 读取指定路径下的文件, 返回文件相对路径名
csv_list = glob.glob(f'speedup_csv/{platform}*.csv') #查看同文件夹下的csv文件数
print(f'共发现{len(csv_list)}个CSV文件')
print(u'正在处理............')
for i, csv_file in enumerate(csv_list): #循环读取同文件夹下的csv文件
fd = pd.read_csv(csv_file)
if i==0: # 第一个csv需要保存head
fd.to_csv(out_file, encoding="utf-8", mode="a+", index=False, header=True)
else: # 后面的csv不需要保存head
fd.to_csv(out_file, encoding="utf-8", mode="a+", index=False, header=False)
print(u'合并完毕!')
算法四 根据索引重新排序整个csv
import pandas as pd
import glob
import os
import shutil
files = glob.glob("*.csv")
find = ["parboil","rodinia", "shoc", "npb", "amd", "nvidia", "polybench"]
if os.path.exists(r"new/"):
shutil.rmtree(r"new/")
os.mkdir(r"new/")
for file in files:
find_index = []
print(file,"正在处理中")
data = pd.read_csv(file)
for find_data in find: # 得到索引find
find_index.append(list(data["bench"]).index(find_data))
new_data = pd.DataFrame(data, index = find_index)
# print(new_data)
new_data.to_csv(r"new/"+file, index=False)
算法五 判断为空
import numpy as np
import pandas as pd
path_csv = "rewrites.csv" #这里面有空着的需要提出来
data_rewrites = pd.read_csv(path_csv)
# print(data_rewrites["rewrite"].values[0])
error_numb = []
for i in range(3463):
#可以打印不成功的
if not isinstance(data_rewrites["rewrite"].values[i],str):
error_numb.append(i)
print(error_numb)
算法六 判断某个值的存在性
目的: 需要判断csv中是否已经存在数据, 如果没有存在数据就继续插入一行
import sys, os
import numpy as np
import pandas as pd
data = pd.read_csv("00_result_amd.csv")
print(data.head(2)) # 读取前两行数据
print(data.tail(2)) # 读取最后两行
print(data.columns.values) # 读取key
# 想判断数据是否在表中
# 通过建立key-value的字典, 比如 cycle-opt判断是否存在, 把所有的kv都创建了, 然后在判断存在
d = {}
for k in zip(data["cycle"].values, data["opt"].values, data["model"].values):
d[k] = 1
a = (12, 'gridsearch', 'resnet-18')
b = (0, 'gridsearch', 'resnet-18')
print(a in d)
print(b in d)
'''
cycle opt model geomean
0 30 xgb mobilenet 139.128340
1 30 rl mobilenet 139.641067
['cycle' 'opt' 'model' 'geomean']
False
'''