使用 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 文件?
使用 numpy / pandas 读取 Python 中 CSV 文件的最后 N 行