pandas read_csv-从某一行开始跳过每隔一行

时间:2019-02-25 15:03:40

标签: python pandas csv

我有一个很大的.csv文件(超过100万行),我正在尝试使用pandas read_csv函数进行解析。该文件非常大,因为它是来自具有很高采样率的传感器的测量数据,我想从中获取降采样的片段。我尝试使用lambda函数以及skiprowsnrows参数来实现它。我的代码当前所做的是,它一次又一次地读取同一段。

segment_amt = 20 # How many segments we want from a individual measurement file
segment_length = 5 # Segment length in seconds
segment_length_idx = fs * segment_length # Segmenth length in indices
segment_skip_length = 10 # How many seconds between segments
segment_skip_idx = fs * segment_skip_length # The amount of indices to skip between each segment
downsampling = 2 # Factor of downsampling

idx = start_idx
for i in range(segment_amt):

    cond = lambda x: (x+idx) % downsampling != 0
    data = pd.read_csv(filename, skiprows=cond, nrows = segment_length_idx/downsampling,
           usecols=[z_component_idx],names=["z"],engine='python')
    M1_df = M1_df.append(data.T)
    idx += segment_skip_idx

这将导致类似this的情况。我认为该行为是由于lambda函数引起的,但我不知道如何解决它,因此它每次都基于idx更改起始行(这是我目前认为的做法)。

1 个答案:

答案 0 :(得分:0)

您的cond lambda错误。如果是x < idxx % downsampling != 0,则要跳过行。只是这样写:

cond = x < idx or x % downsampling != 0

但是您还应该考虑传递header = False以避免将每个段的第一行作为标题处理。