代码之家  ›  专栏  ›  技术社区  ›  CentauriAurelius

python:循环遍历txt文件并删除前几行字符串

  •  1
  • CentauriAurelius  · 技术社区  · 8 年前

    我有文本文件,每个文件有90列不同长度的时间序列数据。在这90列之前,我要删除6行垃圾字符串数据。从第7行开始,数据均为浮点型。

    我尝试了以下操作,但没有更改我的文件:

    folder = '/Users/LR/Desktop/S2'
    files = os.listdir(folder)
    for filename in files:
           lines = open(filename).readlines()
           open(filename, 'w').writelines(lines[6:])
    

    我还试着加载文件并跳过前6行,但是numpy。除非我设置dtype='str',否则loadtxt不起作用。它成功地剪切了前6行。。但它作为string Ndaray对象导入,我不知道如何将其转换为浮点数组。

    data = np.loadtxt('STS2.txt', delimiter = '\t', skiprows=6, dtype='str')
    data = data.astype(float) # this gives the error: ValueError: could not convert string to float: 
    

    data_float = np.loadtxt('STS2.txt', delimiter='\t', dtype=float, skiprows=7) # this gives the error: ValueError: could not convert string to float: 
    

    有人知道解决这个问题的方法吗?

    2 回复  |  直到 8 年前
        1
  •  1
  •   user94559    8 年前

    numpy 无法将其解析为 float . 无论如何,您只对前90列感兴趣,所以添加 usecols=range(90) :

    np.loadtxt('STS2.txt', skiprows=6, usecols=range(90))
    

    (当然,如果您已经切掉了前六行,现在可以删除 skiprows=6 .)

    编辑

    usecols=range(1, 90)

        2
  •  1
  •   Stefan Falk    8 年前

    你可以用 pandas 来帮助你。使用以下代码:

    import pandas as pd
    import numpy as np
    
    df = pd.read_csv('STS1.txt', delimiter='\t', skiprows=[0,1,2], index_col=0)
    df = df.T.set_index(np.nan, append=True).T
    

    enter image description here

    请注意,您的列现在是分层的。您可以检查您的类型:

    df.dtypes
    

    输出:

    1      float64
    2      float64
    3      float64
    4      float64
    ...
    

    您还可以轻松地将数据转换为 int

    df = df.fillna(0).astype(int)