对于数据集的一些处理:对csv的操作并移动复制图片
读取csv文件
首先对于数据来说有了csv文件,在python使用过程中通过pandas库中相关操作进行。
使用read_csv()
函数进行读取为dataframe的格式
例如我的csv文件的路径在:data/shuju/train.csv
中
当我进行读取时候的代码:
df_train = pd.read_csv(os.path.join('./data/', f'shuju', 'train.csv'))
删除某一列指定内容
如果我的csv数据集中有一列sex
,里面有0和1,我们想要删除所有sex=0的数据,那么:
df_train = df_train[df_train['sex'] != -1].reset_index(drop=True)
这里的df_train就是上面读取的,后面例子一样
csv中根据图片名称去设置该图片的路径
如果数据中有一列image_name
是我们图像的名称,我们可以在csv中设置一个新的列去添加每一个图像的路径,我们新添加的列为filepath
说明:我们图像jpg的路径是data/shuju/train/image_name.jpg
中
df_train['filepath'] = df_train['image_name'].apply(
lambda x: os.path.join('./data/', f'shuju/train', f'{x}.jpg'))
csv中将某一列中的A全部替换为B
我们假设对于csv中的guojia
这一列中的Wan
替换为China
df_train['guojia'] = df_train['guojia'].apply(lambda x: x.replace('Wan', 'China'))
将两个dataframe数据(csv)连在一起
假设train_0和train_1是读取的两个不同csv的dataframe数据,将两个结合起来
train = pd.concat([train_0, train_1]).reset_index(drop=True)
只要csv某一列中具体属性的数据
例如我们对于df_train数据中只要guojia
列中为China
的数据
df_train=df_train[df_train['guojia']=='China']
从CSV中随机选取自定义行的数据
比如说我们的数据有5w个,对于与csv也应该是5w,我们只要100个
df_train= df_train.sample(100)
打乱数据集中的位置
df_train = df_train.reindex(np.random.permutation(df_train.index))
将dataframe输出为csv文件
上面说的csv虽然和dataframe一致,但是对于dataframe来说是python中的一种类型,而对于csv来说是文件的类型,所有他们之间可以相互转换。csv转为dataframe第一个都已经说了。那么对于dataframe转成csv:
df_train.to_csv('df_train_1.csv')
根据csv列中的信息去移动图片
上面我们的csv中有图片的路径信息,并且经过了一些其他处理,此时的图像不是我们最终要的。我们使用shutil
对数据进行复制
df_train = pd.read_csv(os.path.join('df_train_1.csv'))
# 新建文件夹train
Train=os.path.exists('train')
if not Train:
os.makedirs('train')
else:
print('目录已存在')
# 通过遍历filepath列,使用shutil工具将原始路径下的文件复制到指定的文件夹
for pth in df_train['filepath']:
shutil.copy(pth,'train')
做完之后我们需要的图像会存在train文件夹中