如何在Pandas中读取CSV:每4行保留第2行(行号2、6、10…)的数据
解决方案
首先明确:pandas.read_csv的skiprows参数里,行号从0开始计数——x=0是CSV表头行,x=1是第一条数据行,以此类推。
针对你要保留“第2、6、10…行(从第2行开始每4行取一行)”的需求,分两种常见场景给出代码:
场景1:行号指CSV物理行号(从1开始)
也就是保留CSV文件里第2、6、10行(表头是第1行),对应skiprows里的x=1、5、9…,满足(x-1) %4 ==0:
import pandas as pd # 读取指定列并筛选目标行 df = pd.read_csv( 'env_picacho-ma_2013.csv', usecols=['fecha_observacion', 'valor'], skiprows=lambda x: x != 0 and (x - 1) % 4 != 0 ) # 输出valor列 print(df['valor'])
场景2:行号指数据行序号(从1开始)
也就是保留第2、6、10条数据(跳过第1、3、4、5…条数据),对应skiprows里的x=2、6、10…,满足(x-2) %4 ==0:
import pandas as pd df = pd.read_csv( 'env_picacho-ma_2013.csv', usecols=['fecha_observacion', 'valor'], skiprows=lambda x: x != 0 and (x - 2) % 4 != 0 ) print(df['valor'])
备选方案:先全量读取再筛选
如果觉得skiprows的计数逻辑绕,可先读取所有目标列,再通过索引筛选:
对应场景1
import pandas as pd df = pd.read_csv('env_picacho-ma_2013.csv', usecols=['fecha_observacion', 'valor']) # 筛选索引满足 (索引-1) %4 ==0 的行 filtered_df = df[(df.index - 1) % 4 == 0] print(filtered_df['valor'])
对应场景2
import pandas as pd df = pd.read_csv('env_picacho-ma_2013.csv', usecols=['fecha_observacion', 'valor']) # 筛选索引满足 (索引-1) %4 ==0 的行(第2条数据对应索引1) filtered_df = df[(df.index - 1) % 4 == 0] print(filtered_df['valor'])
内容的提问来源于stack exchange,提问作者Mireia
相关产品推荐
相关产品推荐

