有一个csv文件,是以天数为单位,24h的空气质量数据。我想带着每天24h的数据以天为单位打乱整个csv,一共有1825天。
Python新上路,真诚求思路!
目前想到的办法是每隔24行提取一次数据并单独保存到一个文件,这样就是一共提取出来1825个csv,然后把这些csv再随机(不知道是否能办到)组合起来生成一个新的csv数据表,但是不咋会怎么循环提取每24行的数据,以及后续怎么随机组合
或者有uu能给出新的思路?
不需要每隔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)
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
使用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库,做数据分析常用
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!