请问如何利用Python对单个csv文件进行处理,使得每三行合并成一行
例:
原来:
1 0,2,4,5
2 3,1,2,4
3 2,3,4,5
4 3,5,6,9
5 6,3,4,5
6 2,3,4,7
预期达到的效果
1 0,2,4,5,3,1,2,4,2,3,4,5
2 3,5,6,9,6,3,4,5,2,3,4,7
import csv # 导入csv模块
filename = 'test.csv'
# 打开CSV文件
with open(file=filename) as csvFile:
# 2.创建reader对象
csvReader = csv.reader(csvFile)
rows = []
list1 = []
# 以循环方式列出对象内容
for row in csvReader:
print(f'Row {csvReader.line_num}: {row}')
list1.extend(row)
print(list1)
if csvReader.line_num % 3 == 0:
rows.append(list1)
list1 = []
print(rows)
# 打开欲写入的文件,不存在则自动创建
with open(file='test2.csv', mode='w', newline='\n') as csvFile:
# 2.创建writer对象
csvWriter = csv.writer(csvFile)
csvWriter.writerows(rows)
思路:
读取csv每一行数据组成一个数组,整个csv组成二维数组
就是这样[[],[],[],[],[],[],[]]。
创建一个新的csv, 循环写入数组,每三次换一行
import pandas as pd
data = [[0,2,4,5],
[3,1,2,4],
[2,3,4,5],
[3,5,6,9],
[6,3,4,5],
[2,3,4,7]]
df = pd.DataFrame(data)
df['row'] = [i//3 for i in list(df.index)]
df_out = df.set_index(['row',df.groupby(['row']).cumcount()+1]).unstack().sort_index(level=1, axis=1)
df_out.columns = df_out.columns.map('{0[0]}_{0[1]}'.format)
df_out.reset_index()
效果图:
import pandas as pd
df = pd.read_excel(r'./data.xlsx')
df['m'] = df['con']+'*'+df['tet']
dd = df.groupby('ID')['m'].agg('*'.join)
print(dd)