怎样在Python csv文件中每24行提取一次数据并保存到一个单独的csv文件中?

算法目的

有一个csv文件,是以天数为单位,24h的空气质量数据。我想带着每天24h的数据以天为单位打乱整个csv,一共有1825天。
Python新上路,真诚求思路!
目前想到的办法是每隔24行提取一次数据并单独保存到一个文件,这样就是一共提取出来1825个csv,然后把这些csv再随机(不知道是否能办到)组合起来生成一个新的csv数据表,但是不咋会怎么循环提取每24行的数据,以及后续怎么随机组合
或者有uu能给出新的思路?

这是原始csv截图

img

求友友们指点!

不需要每隔24行数据单独保存到一个文件,
只需要用列表切片每隔24行切成为一个列表,把切片出来的列表作为一个元素添加到一个li2列表中.
用random.shuffle(li2)随机打乱li2,再合并写到一个新的csv数据表即可

你题目的解答代码如下:

import random
import csv

with open("data.csv","r",newline="", encoding='utf-8') as fileObj:
    li = list(csv.reader(fileObj))
n = 24
li2 = []
for i in range(0,len(li),n):
    li2.append(li[i:i+n])
random.shuffle(li2)
# print(*li2,sep='\n')
with open("data2.csv","w",newline="", encoding='utf-8') as fileObj:
    wr = csv.writer(fileObj)
    for v in li2:
        wr.writerows(v)

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

使用pandas ,按每24行取出子数据框,放入列表并随机排序,再合并成一个数据框,代码如下:

import pandas as pd
import random
pd.set_option('display.max_rows',None)
dt=pd.date_range('2010-01-01','2010-01-08',freq='H',inclusive='left')
df=pd.DataFrame({'date':dt,'value':[random.choice(range(100)) for _ in range(len(dt))]})
dfs=[df[i:i+24] for i in range(0,len(df),24)]
random.shuffle(dfs)
res=pd.DataFrame()
for df0 in dfs:
    res=pd.concat([res,df0],ignore_index=True) 
print(res)
res.to_csv('new.csv')

运行结果:

date  value
0   2010-01-07 00:00:00     86
1   2010-01-07 01:00:00     84
2   2010-01-07 02:00:00     20
3   2010-01-07 03:00:00     31
4   2010-01-07 04:00:00     56
5   2010-01-07 05:00:00     44
6   2010-01-07 06:00:00     89
7   2010-01-07 07:00:00     65
8   2010-01-07 08:00:00     40
...

如有帮助,请点采纳按钮~

建议学习下panada库,做数据分析常用

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632