Python 以特定格式写入csv文件
我有一个巨大的Python 以特定格式写入csv文件,python,csv,pandas,Python,Csv,Pandas,我有一个巨大的csv文件,其中包含时间戳和其他七列 时间戳以10秒为间隔组织。我已经计算了每小时这些值的平均值、最小值和最大值 我需要将输出放入另一个csv文件中,该文件按以下方式组织: timestamp, Name_of_header, min, max, average 2012-05-04 06:00:00, "data1", 25.0, 56.0 40.5 2012-05-04 06:00:00, "data2", 30.0, 50.0, 40.0 .. .. .. 2012-05-0
csv
文件,其中包含时间戳和其他七列
时间戳以10秒为间隔组织。我已经计算了每小时这些值的平均值
、最小值
和最大值
我需要将输出放入另一个csv
文件中,该文件按以下方式组织:
timestamp, Name_of_header, min, max, average
2012-05-04 06:00:00, "data1", 25.0, 56.0 40.5
2012-05-04 06:00:00, "data2", 30.0, 50.0, 40.0
..
..
..
2012-05-04 08:00:00, "data1", 10.0, 20.0, 15.0
2012-05-04 08:00:00, "data2", 15.0, 30.0 22.5
..
..
我的工作代码按小时给出平均值
、最小值
和最大值
,如下所示:
from datetime import datetime
import pandas as pd
def same_day(date_string): # remove year
return datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S").strftime('%H:%M')
df = pd.read_csv('convertcsv.csv', parse_dates = True, index_col=0,
usecols=[0,1,2,3,4,5,6,7], names = ['date', 'data1', 'data2', 'data3', 'data4', 'data5', 'data6', 'data7'])
hourly_avg = df.groupby(pd.TimeGrouper('H'))
print((hourly_avg['data1]).agg([np.mean, np.min, np.max]))
(hourly_avg.mean()).to_csv('file.csv')
我一直在以我需要的格式获取所有值。如何放置所有的
data1
,data2
,data3
。。在一个标题下,然后一次在一行上打印它们的平均值
、最小值
和最大值
值?看起来您将有很多列要聚合-假设“date”是您的时间戳,似乎有七个,即data1-data7。如果将三个聚合函数应用于这七个列(平均值、最小值、最大值),则将得到7 x 3个具有层次结构的多索引的列(其中.agg(dict)
的工作方式与“普通”列不同)。下面的示例包括在结尾保存为csv。和
样本数据:
df = pd.DataFrame(np.random.random((1000, 7)), columns=['data_' + str(i) for i in range(7)], index=pd.date_range(date(2015,11,29), periods=1000, freq='15S'))
data_0 data_1 data_2 data_3 data_4 \
2015-11-29 00:00:00 0.331546 0.317863 0.616388 0.784063 0.968004
2015-11-29 00:00:15 0.299468 0.971885 0.954483 0.856748 0.230223
2015-11-29 00:00:30 0.246160 0.618193 0.902762 0.518121 0.705881
2015-11-29 00:00:45 0.875753 0.629994 0.029394 0.883197 0.939194
2015-11-29 00:01:00 0.696372 0.536321 0.632785 0.009850 0.951280
data_5 data_6
2015-11-29 00:00:00 0.829210 0.323449
2015-11-29 00:00:15 0.753155 0.619336
2015-11-29 00:00:30 0.149181 0.679280
2015-11-29 00:00:45 0.236912 0.024689
2015-11-29 00:01:00 0.171320 0.520080
按小时分组,计算分组统计数据:
hourly_stats = df.groupby(pd.TimeGrouper('H')).agg([np.sum, np.min, np.max])
data_0 data_1 \
mean amin amax mean amin
2015-11-29 00:00:00 0.493442 0.003107 0.999432 0.495162 0.003796
2015-11-29 01:00:00 0.506108 0.001073 0.988778 0.485588 0.001207
2015-11-29 02:00:00 0.484978 0.003669 0.993387 0.495174 0.006063
2015-11-29 03:00:00 0.510354 0.011436 0.997326 0.489296 0.000456
2015-11-29 04:00:00 0.544405 0.040678 0.965896 0.542452 0.049254
data_2 data_3 \
amax mean amin amax mean
2015-11-29 00:00:00 0.994239 0.487602 0.001981 0.994280 0.491253
2015-11-29 01:00:00 0.998454 0.467457 0.001216 0.997955 0.511204
2015-11-29 02:00:00 0.999235 0.513108 0.003046 0.998595 0.524719
2015-11-29 03:00:00 0.996543 0.528340 0.002706 0.995325 0.488485
2015-11-29 04:00:00 0.984905 0.506434 0.025606 0.925806 0.535858
... data_4 \
... amax mean amin amax
2015-11-29 00:00:00 ... 0.991856 0.487274 0.010722 0.998514
2015-11-29 01:00:00 ... 0.999489 0.533160 0.003481 0.982976
2015-11-29 02:00:00 ... 0.998216 0.482723 0.001257 0.999445
2015-11-29 03:00:00 ... 0.999063 0.495377 0.002491 0.997803
2015-11-29 04:00:00 ... 0.948984 0.522290 0.011772 0.998149
data_5 data_6 \
mean amin amax mean amin
2015-11-29 00:00:00 0.523222 0.005653 0.999984 0.488832 0.004678
2015-11-29 01:00:00 0.490922 0.000483 0.998804 0.500331 0.001843
2015-11-29 02:00:00 0.478979 0.011122 0.998308 0.517226 0.001161
2015-11-29 03:00:00 0.527019 0.008794 0.999160 0.461164 0.002979
2015-11-29 04:00:00 0.415962 0.004843 0.975577 0.523150 0.050968
amax
2015-11-29 00:00:00 0.993302
2015-11-29 01:00:00 0.998207
2015-11-29 02:00:00 0.997752
2015-11-29 03:00:00 0.999652
2015-11-29 04:00:00 0.998608
您可以将结果直接保存到csv(选项:使用hourly_stats.columns=['col_name_1'、'col_name_2'、…..'col_name_21']重命名列)
:
hourly_stats.to_csv('path/to/file.csv')
您想让我们为您编写它吗?(c:不,但我对Python很陌生,所以任何指导都会很有帮助。尝试一些代码来完成您期望的操作。如果它没有按预期工作,请在这里发布它,并显示错误消息。然后我们将提供帮助。非常感谢:)它以您显示的方式打印输出。AttributeError:无法访问“DataFrameGroupBy”对象的可调用属性“to_csv”,请尝试使用“apply”方法,但在打印到csv文件时仍会出现此错误,如果您在调用.agg()之前尝试调用df.groupby()上的_csv,则会发生此错误。后者返回一个DataFrame,前者返回一个DataFrameGroupBy对象,因此出现错误。因此df.groupby().agg().to_csv()应该可以工作,但是df.groupby().agg()应该给出您看到的错误。确切地说,我这样做了,效果很好:)谢谢您的帮助。出于好奇,我的数据是以10秒的间隔组织的,如果有一些间隔超过10秒的数据,我如何检查间隙并打印?我正在尝试做df['num_gaps']=df.groupby(pd.TimeGrouper('H'))df.groupby(df.index.time)['num_gaps'].sum(),但我不确定是否正确谢谢你的建议。我把它作为一个新问题发布了。如果你能提供任何帮助,那就太好了。谢谢