繁体   English   中英

以特定格式写入 csv 文件

[英]Writing to a csv file in a particular format

我有一个巨大的csv文件,其中包含时间戳和其他七列。

时间戳以 10 秒为间隔组织。 我每小时计算了这些值的averageminmax

我需要将输出放在以下列方式组织的另一个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
..
..

我的工作代码每小时给出averageminmax如下:

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')  

我一直坚持以我需要的格式获取所有值。 如何将所有data1data2data3 .. 放在一个标题下,然后一次在一行上打印它们的averageminmax

似乎您将有很多列要聚合 - 假设“日期”是您的时间戳,似乎有七个,即 data1 - data7。 如果您将三个聚合函数应用于这七列(平均值、最小值、最大值),您将获得具有分层MultiIndex 7 x 3 列(其中.agg(dict)与“普通”列的工作方式不同)。 示例如下,包括最后保存到 csv。 GroupBy文档to_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')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM