Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以特定格式写入csv文件_Python_Csv_Pandas - Fatal编程技术网

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(),但我不确定是否正确谢谢你的建议。我把它作为一个新问题发布了。如果你能提供任何帮助,那就太好了。谢谢