将csv文件的内容存储到数据帧中[Python]

2024-04-25 23:36:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个函数,可以读取csv文件,将其存储为数据帧,并按小时对其重新采样。下面是我的代码

def ABC(path1,path2):
    df1=pd.read_csv(path1, sep='\t',names = ["Datetime", "Value"])
    df2=pd.read_csv(path2, sep='\t',names = ["Datetime", "Value"])
    df1['Datetime']=pd.to_datetime(df1['Datetime'])
    df1=df1.set_index('Datetime')
    df1=df1.resample('H',how='sum')
    df2['Datetime']=pd.to_datetime(df2['Datetime'])
    df2=df2.set_index('Datetime')
    df2=df2.resample('H',how='sum')
    ABC = pd.DataFrame(df1['Value'] + df2['Value'])
    ABCD = ABC * 0.519
    return ABC, ABCD
ABC, ABCD= ABC('C:\Users\Desktop\B1.tsv'
                             ,'C:\Users\Desktop\B2.tsv')

这个程序工作得很好,但如果我有30个文件路径,那么它将很难使30个数据帧和做这个过程。 我在考虑按照上面的方法去做

def ABC():
    Path= ['B1','B2','B3']
    general = []
    for i in Path:
        url = ('C:\Users\Desktop\%s.tsv'%i)
        X = pd.read_csv(url,sep='\t',names = ["Datetime", "Value"])
        X['Datetime']=pd.to_datetime(X['Datetime'])
        X=X.set_index('Datetime')
        X=X.resample('H',how='sum')
        general.append(X)
        return general
df=ABC()
print df

上面的代码只输出一个数据帧,而不输出第一个脚本正在执行的操作。知道我做错了什么吗?你知道吗


Tags: csvto数据readdatetimeindexnamesvalue
1条回答
网友
1楼 · 发布于 2024-04-25 23:36:57

返回得太早(在第一次迭代之后)。这是一个缩进问题。函数应为:

def ABC():
    Path= ['B1','B2','B3']
    general = pd.DataFrame()
    for i in Path:
        url = ('C:\Users\Desktop\%s.tsv'%i)
        X = pd.read_csv(url,sep='\t',names = ["Datetime", "Value"])
        X['Datetime']=pd.to_datetime(X['Datetime'])
        X=X.set_index('Datetime')
        X=X.resample('H',how='sum')
        if len(general) == 0:
            general = X
        else:
            general = general['Values'] + X['Values']
    return general

注意最后一行的缩进。你知道吗


编辑:根据注释中的请求,添加代码对循环中的数据帧求和。你知道吗

首先,创建一个名为general的空数据帧。在第一次迭代时(当空数据帧的长度为0时),将当前数据帧X分配给general。在随后的迭代中,将当前数据帧的值添加到存储在general中的所有先前数据帧的值的总和中。你知道吗

相关问题 更多 >