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

如何删除您喜欢python的行之间的更多行?

  •  0
  • user8230258  · 技术社区  · 9 年前

    我有一个奇怪的文件格式

    ###########################################################
    # Name of file#
    # stuff[hh:mm:ss:ms] stuff[num] stuff[num] stuff[] stuff[]#
    ###########################################################
    00:00:00.000 -1000 -1000 0.000001 20
    00:00:00.001 -1000 -1000 0.000001 20
    00:00:00.002 -1000 -1000 0.000001 20
    00:00:00.003 -1000 -1000 0.000001 20
    00:00:00.004 -1000 -1000 0.000001 20
    00:00:00.005 -1000 -1000 0.000001 20
    00:00:00.006 -1000 -1000 0.000001 20
    00:00:00.007 -1000 -1000 0.000001 20
    

    df = pd.read_csv('file.txt', sep="\t",
    names=("time", "num1", "num2", "num3", "num4"), skiprows=4)
    df["abs_time"] = df.index * 1e-3
    

    我必须以不同的方式定义时间,我已经有了代码,我只需要正确地保存它。

    def get_sec(time_str):
    m, s, ss = time_str.split(':')
    return int(m) * 60 + int(s) + 0.01*int(ss)
    

    非常感谢您的帮助。

    3 回复  |  直到 9 年前
        1
  •  1
  •   Carles Mitjans    9 年前

    您可以使用 skiprows 参数以获取奇数行(或偶数行)。根据文件:

    否则有效的可调用参数示例为lambda x:

    这里有一个csv示例:

    #
    #
    #
    #
    A,B
    1,1
    2,2
    3,3
    4,4
    

    pd.read_csv('test.csv', skiprows=lambda x: True if x < 4 or x%2 == 1 else False)
    

       A  B
    0  2  2
    1  4  4
    

    如您所见,您可以读取奇数或偶数行,因此每2秒仅获取行。但是请注意,这假设:

    1. 您正在使用最新的pandas版本0.20.2
    2. 您的数据是连续的,即每秒一行
        2
  •  1
  •   White    9 年前

    def is_select(time_str):
        return str.endswith(time_str, ".000") and int(time_str[6:8])%2
    df['even_seconds'] = pd.apply(lambda x: is_select(x["time"]), axis=1)
    select_data = df[df.even_seconds==True]
    

    x["time"][6:8] 将为您提供秒信息(您可以自己调整索引)。

    当然,您可以为其他数据选择修改lambda函数。

        3
  •  0
  •   Tbaki    9 年前

    vector_bool = df[df.columns[0]].apply(lambda x: x.split(".")[-1]).astype(int).cumsum().apply( lambda x: x%2000 == 0 )
    

    df_clean = df[vector_bool]