在进行数据处理的过程中可能会存在数据在多个文件中的问题,可以使用pandas库来对批量文件进行预处理。本文章展示了几种可能会用于多个文件所使用到的操作
1.每个文件都有一个开头,只保留第一个文件的一个开头(即第一行的title),将所有的数据合并到一个新的文件里面。
示例代码如下所示(将1.csv文件和2.csv文件的数据都写到train.csv里面,同时只保留了1.csv里面的title):
str_name = '1.csv'
df = pd.read_csv(str_name)
df.to_csv("train.csv", index=None)
str_name = '2.csv'
with open('train.csv', 'a', newline='') as f:
df = pd.read_csv(str_name)
df.to_csv(f, index=None,header=None)
第一个str_name是要读入的数据,然后第三行将代码写入到这个文件里面,第四行是第二个文件,然后将第二个文件写入到train.csv这个文件里面(最后一行的index是表示不需要写入pandas自带的index索引,header就是文件的第一行,表示的是第二个文件我不需要它的第一行,直接从第二行开始读就行了)
2.将文件里的数据进行打乱顺序(第一行的title不变)
import pandas as pd
from sklearn.utils import shuffle
data = pd.read_csv('train.csv', sep=',')
data = shuffle(data)
data.to_csv("train2.csv", index=None,header=True)
调用sklearn库对train.csv文件里的数据进行打乱,然后将数据写入到train2.csv,header=True表示保留了第一行的title
3.将文件进行分割(即我们需要把数据分成两个文件,一个为a,一个为b,同时将第一行的title放到a文件和b文件里面):
csv_reader = csv.reader(open('train2.csv','r'))
for index, rows in enumerate(csv_reader):
if index ==0:
print (rows)
with open('train_use_high3.csv', 'a',newline='') as f:
new_writer = csv.writer(f)
new_writer.writerow(rows)
with open('test_use_high3.csv', 'a',newline='') as f:
new_writer = csv.writer(f)
new_writer.writerow(rows)
continue
if index <51000:
with open('train_use_high3.csv', 'a',newline='') as f:
new_writer = csv.writer(f)
new_writer.writerow(rows)
else:
with open('test_use_high3.csv', 'a',newline='') as f:
new_writer = csv.writer(f)
new_writer.writerow(rows)
效果:将第一行的title写入到两个文件里,前51000行的数据写入到train_use_high3.csv里面,后面的数据写入到test_use_high3.csv里面