0
点赞
收藏
分享

微信扫一扫

csv汇总


文章目录

  • ​​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

csv汇总_python

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
'''


举报

相关推荐

0 条评论