从具有不同列数和混合数据类型的csv文件中读取数据 - python

时间:2017-09-21 15:18:17

标签: python-3.x pandas numpy

我有一个带有以下输入的CSV文件:

  

标题;高数据

     

日期保存; 01.01.2000; 00:00

     

注释;

     

放大; 1; [M]

     

计数; 4931

     

长度; 5583; [M]

     

开始1; 0; 1475

     

结束1; 4931; 1475

     

Profil 1 [μm]

     

529

     

528

     

依旧......

我想将计数和长度读入变量。问题似乎是列数不同。我尝试过不同的东西将它加载到一个numpy数组或一个pandas数据帧中,但没有真正解决。请帮我!谢谢!

编辑:这是我用来将其加载到pandas数据帧中的代码:

fin = pd.read_csv('Temp.csv', sep = ';')
df = pd.DataFrame(fin)

但之后我无法从数据框中读取数据......

1 个答案:

答案 0 :(得分:1)

这不是一个真正的CSV文件。如果要将文件解析为pandas数据帧,通常需要查看类似于表的内容(例如:每列是一个功能,每行是一个样本/项/人)。

这里似乎有三种类型的数据注释格式:

1

[NAME OF FEATURE];[VALUE FOR FEATURE]

2

[NAME OF FEATURE];[VALUE FOR FEATURE];[UNIT]

3

[NAME OF FEATURE][UNIT]
[VALUE]
[VALUE]
[VALUE]

如果有很多这样的文件,我建议你自己编写一个解析器,或者如果数据只是一个文件,我会建议将数据重新整理成一致的格式。最好是:

Title, Date Save, Comment, Magnification, ..., Profil 1, ...
High Data, 01.01.2000;00:00,,1,...,"529,528",...
...

编辑:如果你只关心数量和长度。

  

我想将计数和长度读入变量。

relevant_lines = [line.split(';')[:1] for line in open(your_file_name).read().split('\n') if line.startswith('Counts') or line.startswith('Length')]
df = pd.DataFrame([dict(relevant_lines)])

制作一个看起来像这样的df:

  Count Length
0  4931  5583

即使是简单编辑:如果您只是想将它们作为变量而根本不关心数据框:

lines = open(your_file).read().split('\n')
count = None
length = None
for line in lines:
    if(line.startswith('Length')):
        length=int(line.split(';')[1])
    if(line.startswith('Count')):
        count=int(line.split(';')[1])