读取一个30g以上的csv文件,逐行读取该csv文件,文件有五列,分别为schedulerid、nameid、addlongtime、variableid、val。 当读取到行,第二列为47且第三列时间相同时,时间格式举例为20220223082350,构建新的csv文件,文件一共有三列,第一列为schedule,第二列为time,第三列为weiyi,将连续相同的第三列情况下的第五列数值,写入在新建csv文件weiyi下的一个单元格中每个数值以“,”隔开,并将第三列相同的时间改变格式为2022/02/23 08:23:50写入新建csv文件time中,第一列写入新建文件csv文件schedule中。
时间: 2023-05-30 12:07:09 浏览: 45
由于数据量很大,可以采用分块读取的方式,每次读取一定行数的数据,处理后写入新的csv文件中。
示例代码:
```python
import pandas as pd
import datetime
# 定义读取的块大小
chunksize = 100000
# 定义输出文件名和列名
output_file = 'output.csv'
output_cols = ['schedule', 'time', 'weiyi']
# 打开输出文件,写入列名
with open(output_file, 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(output_cols)
# 逐块读取原始文件
for df in pd.read_csv('input.csv', chunksize=chunksize):
# 筛选出第二列为47的行
df = df[df['nameid'] == 47]
# 按时间排序
df = df.sort_values('addlongtime')
# 遍历每一行,构建新的数据行
new_rows = []
last_time = None
last_weiyi = None
for index, row in df.iterrows():
time_str = row['addlongtime'] # 时间字符串,格式为20220223082350
time_obj = datetime.datetime.strptime(time_str, '%Y%m%d%H%M%S') # 转换为datetime对象
weiyi = row['val']
if time_obj == last_time:
# 如果时间相同,将当前weiyi加入到上一个数据行的weiyi中
last_weiyi.append(weiyi)
else:
# 如果时间不同,构建新的数据行
schedule = row['schedulerid']
time_str = time_obj.strftime('%Y/%m/%d %H:%M:%S') # 将时间格式化为2022/02/23 08:23:50
last_time = time_obj
last_weiyi = [weiyi]
new_row = [schedule, time_str, last_weiyi]
new_rows.append(new_row)
# 写入新的数据行到输出文件中
with open(output_file, 'a', newline='') as f:
writer = csv.writer(f)
for row in new_rows:
writer.writerow(row)
```
注意:由于数据量很大,上述代码可能需要较长时间才能运行完毕。建议在测试时先读取一小部分数据进行测试。