说是总结,其实就是目前做比赛用到的一些语句和踩过的坑。
首先我要处理的文件是一个jsonl文件,这个文件其实就是存储了多个json格式数据的文件,处理jsonl文件需要安装jsonllines库,安装方法很简单就是pip。
打开文件:
t = [[0 for _ in range(3)] for _ in range(5000)] # 首先构造一个二维列表,5000行3列
i = 0
with jsonlines.open('XXX.jsonl', mode='r') as reader:
for row in reader:
t[i][0] = row['context']
t[i][1] = row['query']
t[i][2] = 1
i += 1
列表转换为DataFrame:
train = pd.DataFrame(t, columns=['context', 'query', 'label'])
构造负样本数据:
tr = [[0 for _ in range(3)] for _ in range(45000)]
j = 0
for i in range(5000):
df = train.drop(i, axis=0) # 每次循环都将不包含第i个query的数据赋值给df
df_i = df['context'].sample(9, axis=0) # 随机采样9行
df_i.reset_index(drop=True, inplace=True) # 因为采样后的数据保持原有数据的索引,
#所以要重新建立索引,每次选取9个数据都是从0到8建索引
while j < (i+1)*9:
tr[j][0] = df_i[j - i*9] # 保证每次索引都是0-8,因为df_i只有9个值
tr[j][1] = train['query'][i]
tr[j][2] = 0
j += 1
列表转换为DataFrame:
train_1 = pd.DataFrame(tr, columns=['context', 'query', 'label'])
DataFrame拼接:
train_data = pd.concat([train, train_1])
写入csv文件:
train_data.to_csv('train_data.csv', index=None)