繁体   English   中英

使用panda或numpy从一个csv加载多个数据帧

[英]Load multiple dataframes from one csv using panda or numpy

我有一个csv文件,其中包含多个以Simulation(索引)条目分隔的Simulation。 每个条目都有一条时间线和3条特征线。 基本上,第一列仅包含模拟(索引)条目,而第二列则具有该模拟的“标题”(时间+功能1,n),然后只有数值。

我想将其包含在某些数据帧或某种numpy数组中,以便绘制每个模拟的图形,并且显然可以更好地控制数据。

作为对这类挑战比较陌生的人,我求助于pandas快速解决方案,但我也欢迎任何python(numpy /其他库)实现。

数据格式示例:

特征线包含500多个样本

谢谢

您的数据示例看起来像Excel,因此我尝试了一个Excel工作表,并使用了pandas的read_excel(CSV有类似的命令):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df0 = pd.read_excel('testdata.xlsx',header=None)
df0.head()

    0   1   2   3   4   5   6   7   8   9   10  11  12
0   sim1    time    1   2   3   4   5   6   7   8   9   10  11
1   NaN     feat1   1   0   -1  0   1   0   -1  0   1   0   -1
2   NaN     feat2   2   0   -2  0   2   0   -2  0   2   0   -2
3   NaN     feat3   3   0   -3  0   3   0   -3  0   3   0   -3
4   sim2    time    1   2   3   4   5   6   7   8   9   10  11

您可以将1个模型的数据提取为pandas数据框或numpy数组:

def get_data_numpy(df,j):
    i = j * (nFeats+1)
    t =  np.array(df.iloc[i,2:])
    y0 = np.array(df.iloc[i+1,2:])
    y1 = np.array(df.iloc[i+2,2:])
    y2 = np.array(df.iloc[i+3,2:])
    return t,y0,y1,y2

def get_data_pandas(df,j):
    i = j * (nFeats+1)
    t =  np.array(df.iloc[i,2:])
    dfy = df.iloc[i+1:i+nFeats+1,2:]
    return t,dfy

nModels = 1                                         # run for 1 model
nFeats  = 3
for jModel in range(nModels):
    tn,y0,y1,y2 = get_data_numpy(df0,jModel)
    tp,dfy      = get_data_pandas(df0,jModel)

    #--- graphics ---
    plt.style.use('fast')  
    fig, ax0 = plt.subplots(figsize=(20,4))
    plt.plot(tp,dfy.T, lw=4, alpha=0.4);           # plot pandas dfy with 1 command

    plt.plot(tn,-y0,lw=6,ls='--')                   # plot each numpy time series
    plt.plot(tn,-y1,lw=6,ls=':') 
    plt.plot(tn,-y2,lw=6,ls='-')
    plt.show() 

fig.savefig('plot_model_1.png', transparency=True)  

在此处输入图片说明

在数据显示( df0.head() )和图中,仅显示第一个模型。 nModels设置一个大于1的数字,然后就可以运行所有模型。

暂无
暂无

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

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