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

Posted

技术标签:

【中文标题】使用 pandas 或 numpy 从一个 csv 加载多个数据帧【英文标题】:Load multiple dataframes from one csv using panda or numpy 【发布时间】:2019-07-25 20:33:31 【问题描述】:

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

我想将它包含在一些数据帧或某种 numpy 数组中,以便为每个模拟绘制图表,显然是为了更好地掌握数据。

作为一个对这些挑战相当陌生的人,我求助于 pandas 来寻求快速解决方案,但我也对任何 python(numpy/其他库)实现持开放态度。

数据格式示例:

谢谢

【问题讨论】:

如果您提供一个小而完整的数据示例,那将是很好和有帮助的。 @Pyano 我希望数据示例对您有所帮助。每行包含 500+ 个数据点。 【参考方案1】:

您的数据示例看起来像 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的数字就可以跑遍所有模型了。

【讨论】:

感谢 @pyano 在这次学习之旅中帮助我。答案写得很好,很全面:)。 tx,没关系。如果它以可接受的解决方案解决了您的问题,您可以单击“已解决”复选框(就在向上/向下投票按钮下方),然后变为绿色。

以上是关于使用 pandas 或 numpy 从一个 csv 加载多个数据帧的主要内容,如果未能解决你的问题,请参考以下文章

如何删除错误行错误的行并使用 pandas 或 numpy 读取剩余的 csv 文件?

如何删除错误行错误的行并使用 pandas 或 numpy 读取剩余的 csv 文件?

有没有办法使用给定目录中的 numpy.genfromtxt 从 csv 读取数据?

将 clf.fit 与 csv 中的 numpy 数组一起使用

Python/Numpy(CSV):查找值,附加另一个 csv

使用 numpy / pandas 读取 Python 中 CSV 文件的最后 N 行