python : How to load column from multiblock csv tables?

标签 python csv numpy block

我现在正在开发 SIP 数据的适配程序。不幸的是,数据位于具有以下结构的 csv 表中:

       f;      Abs(Zm);     Std(Abs);      Phi(Zm);     Std(Phi);       Re(Zm);       Im(Zm);     Time [s]
1.0000000e-001;    7712.6262;       0.0247;    -0.003774;     0.000001;    7712.5713;     -29.1074;   3418623040
2.0000000e-001;    7712.4351;       0.0030;    -0.007543;     0.000001;    7712.2157;     -58.1732;   3418623056
5.0000000e-001;    7710.8455;       0.0094;    -0.018837;     0.000002;    7709.4775;    -145.2434;   3418623063
1.0000000e+000;    7705.3763;       0.0098;    -0.037637;     0.000000;    7699.9195;    -289.9395;   3418623067
2.0000000e+000;    7683.8120;       0.0241;    -0.075058;     0.000001;    7662.1778;    -576.1935;   3418623069
5.0000000e+000;    7539.7945;       0.0080;    -0.184724;     0.000002;    7411.5201;   -1384.8720;   3418623071
1.0000000e+001;    7088.6894;       0.0060;    -0.351521;     0.000001;    6655.2169;   -2440.8206;   3418623072


         f;     Abs(Z12);     Phi(Z12);     Abs(Z34);     Phi(Z34);     Abs(Z14);     Phi(Z14);     Time [s]
1.0000000e-001;       1.7821;     3.139014;       0.2545;    -3.141592;    7710.5896;    -0.003774;   3418623040
2.0000000e-001;       1.7850;     3.133381;       0.2572;    -3.126220;    7710.3930;    -0.007543;   3418623056
5.0000000e-001;       1.7755;     3.121223;       0.2514;    -3.133763;    7708.8186;    -0.018838;   3418623063
1.0000000e+000;       1.7683;     3.100815;       0.2503;     3.139466;    7703.3580;    -0.037638;   3418623067
2.0000000e+000;       1.8091;     3.058834;       0.2538;    -3.123705;    7681.7502;    -0.075060;   3418623069
5.0000000e+000;       1.5547;     2.943611;       0.2398;    -3.136317;    7538.0045;    -0.184727;   3418623071

我正在使用 numpy.loadtxt() 例程从表中收集数据,如下所示:

def load_datafile(filename):
try:
     x_data, y_data = numpy.loadtxt(filename , unpack=True, usecols=(0,1),) 
except IOError:
    print('There was an error opening the file: {0}'.format(filename))
    x_data=[]
    y_data=[]
return x_data, y_data

我知道在 loadtxt() 命令中使用表中的特定 block 没有进一步的标识符。但是有一个方便的解决方法吗?

否则是否有一个简单的脚本可以将 csv 输入文件重新排列为单 block 列?

提前致谢! 问候, 贡纳尔

最佳答案

您可以首先将输入数据拆分为 block ,然后使用 loadtxt 或 genfromtxt (我更喜欢这个,因为它有一个读取 header 的选项)。

from numpy import genfromtxt
from StringIO import StringIO

def read_by_block(filename):
    blocks = []
    data = open(filename).read()
    for blk in data.split('\n\n'): # we assume that blocks are separated by two newlines
        blocks.append(genfromtxt(StringIO(blk), delimiter=';', names=True))
    return blocks

data = read_by_block('data.txt')

print data[0].dtype.names # print fields for first block
print data[0]['StdPhi'] # print column 'Std(Phi)' in 1st block

关于 python : How to load column from multiblock csv tables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10426908/

相关文章:

python - IDLE自动挤占大量线路

python - 在plotly Dash中显示一个简单的matplotlib图

python - 如何获取视频、youtubeAPI、Python 的 channel 名称

Python 客户端 - SSL 库 - 证书验证失败

Python - 以特定方式将制表符分隔文件转换为 csv

python - 如何一次写入多个 csv 行?

csv - 如何在jmeter中多次运行特定的http请求?

python - 在这种情况下有更好的方法使用 numpy 吗?

python - 如何根据目标像素替换 Numpy 图像数组中的所有 RGB 值

python - 如何在 Python 中根据日期进行分类/计数