Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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文件上附加带有for循环的空数据帧_Python_Pandas_Csv - Fatal编程技术网

Python 在CSV文件上附加带有for循环的空数据帧

Python 在CSV文件上附加带有for循环的空数据帧,python,pandas,csv,Python,Pandas,Csv,我正在处理保存在目录中CSV文件中的时间序列数据。每个CSV文件都是相当于一天的随机数据,并且该文件根据其包含的数据的月份和日期进行命名 因此,我们可以生成一些随机数据: import pandas as pd import numpy as np from numpy.random import randint import os np.random.seed(10) # added for reproductibility

我正在处理保存在目录中CSV文件中的时间序列数据。每个CSV文件都是相当于一天的随机数据,并且该文件根据其包含的数据的月份和日期进行命名

因此,我们可以生成一些随机数据:

import pandas as pd 
import numpy as np 
from numpy.random import randint
import os

np.random.seed(10)  # added for reproductibility                                                                                                                                                                 

rng = pd.date_range('10/9/2018 00:00', periods=1000, freq='1H')
df = pd.DataFrame({'Random_Number':randint(1, 100, 1000)}, index=rng) 
使用根目录中名为
csv
的文件夹,创建一些代表每天的csv文件:

# create csv's
for date in set(df.index.date):  

    # filter dataframe    
    filtered_df = df.loc[df.index.date == date].copy()

    # save it
    filename = date.strftime('%m_%d')  # filename represented as 'month_day'
    filtered_df.to_csv(f"./csv/{filename}.csv")
问题,我如何创建一个空文件和一个可以循环所有CSV文件并附加数据集最小值、最大值、中值汇总统计数据的程序?(下面的代码不起作用)

使用
concat()
并在for循环之前创建一个空数据帧对象

path = './csv/'
filelist = os.listdir(path) 

frame = pd.DataFrame() # don't supply anything
for file in filelist:
    df2 = pd.read_csv(path+file)
    date_name = date.strftime('%m_%d')
    df2['Date'] = date_name

    frame = pd.concat([frame, pd.DataFrame({'Date': [date_name], 'max': [df2['Random_Number'].max()], 'min': [df2['Random_Number'].min()], 'median': [df2['Random_Number'].median()]})])
然而,这种方法不是很有效。更好的方法是创建一个dict,然后在最后创建一个数据帧

frame_dict = {'date': [], 'max': [], 'min': [], 'median': []}
for file in filelist:
    df2 = pd.read_csv(path+file)
    date_name = date.strftime('%m_%d')
    df2['Date'] = date_name

    frame_dict['date'].append(date_name)
    frame_dict['min'].append(df2['Random_Number'].min())
    frame_dict['max'].append(df2['Random_Number'].max())
    frame_dict['median'].append(df2['Random_Number'].median())

frame = pd.DataFrame(frame_dict)

“下面的代码不起作用”模棱两可。它给出了什么错误?产生意想不到的结果?请发布您的预期输出。抱歉,错误是
TypeError:如果ignore\u index=True或序列有名称,则只能追加序列。您知道如何绕过
ValueError:如果使用所有标量值,则必须传递一个索引
?最好在最后一次合并,而不是每次迭代都这样做。
frame_dict = {'date': [], 'max': [], 'min': [], 'median': []}
for file in filelist:
    df2 = pd.read_csv(path+file)
    date_name = date.strftime('%m_%d')
    df2['Date'] = date_name

    frame_dict['date'].append(date_name)
    frame_dict['min'].append(df2['Random_Number'].min())
    frame_dict['max'].append(df2['Random_Number'].max())
    frame_dict['median'].append(df2['Random_Number'].median())

frame = pd.DataFrame(frame_dict)