提问人:Mireia 提问时间:10/21/2023 最后编辑:Mireia 更新时间:10/21/2023 访问量:36
在 pandas 中每 4 行读取第 2 个值
read every 2nd value every 4 rows in pandas
问:
我试图只读取我的 excel 数据表每 4 行的值(对应于“媒体”的每个值)。我可以这样做,但我想从第 4 行开始每 2 行阅读一次。或者从技术上讲,它将是第 2 行和第 6 行和第 10 行等。但无论我怎么尝试,我都无法得到我想要的。Excel 数据文件
我尝试了从不同问题中发现的变体:
cols=[' estacion_id','estacion_nombre','sensor_id','sensor_alias','sensor_nombre','fecha_ observacio n','metrica','valor' ]
f=pd.read_csv('env_picacho-ma_2013.csv', usecols=['fecha_observacion', 'valor'])
date=pd.read_csv('env_picacho-ma_2013.csv', usecols=['fecha_observacion'],skiprows=lambda x: logic(x) )
temp=pd.read_csv('env_picacho-ma_2013.csv', usecols=['valor'],skiprows= lambda x:(x % 4))
这给了我每 4 行: 勇气 0 7.7 1 8.4 2 4.7 3 6.8 4 8.2 ... ... 1820 791.0 1821 771.0 1822 841.0 1823 806.0 1824 795.0
我也试过:
def logic(index=0):
if index % 4 == 3:
return True
return False
temp=pd.read_csv('env_picacho-ma_2013.csv', usecols=['valor'],skiprows= lambda x: logic(x))
这将跳过 4 行中的每 3 行。所以我想我可以跳过每一行 1 和每一行 3 和每一行 4 以只保留第 2 行。但这也行不通:
def logic(index=0):
if index % 4 == 3 and index % 4== 2:
return True
return False
再次给了我所有的价值观。我有点理解为什么这行不通,因为我与 myslef 相矛盾,但我不知道如何正确地做到这一点:
valor
0 氮 1 3.78417 2 0.60000 3 7.70000 4 氮 ... ... 7295 806.00000 7296 20382.00000 7297 钠 7298 钠 7299 795.00000
然后我找到了这个,它每 5 行选择每个前 2 个值,但我不知道如何为我的情况修改它(每 2 行每 4 个值):
df.groupby(df.index//5).head(2)
我尝试了很多变体,我想我的另一个选择要么是循环,但我在编码循环方面很糟糕,所以如果有人能提供任何建议,将不胜感激。 我想要的是: 勇气 0 3.78417 1 4.48482 2 2.38661 ...
答:
使用以下公式跳过除第一行(标题)和不符合模式 2、6、10、14 的行之外的每一行怎么样?
def logic(index=0):
if index==0: # keep the header row
return False
if (index+2) % 4 == 0: # keep every 4th row starting from row 2
return False
return True
date = pd.read_csv('env_picacho-ma_2013.csv', usecols=['fecha_observacion'],skiprows=lambda x: logic(x))
我试图只阅读......(对应于“media”的每个值)。
您可以使用:
SR, GAP = 2, 3
df = pd.read_csv("env_picacho-ma_2013.csv", # add more params if needed
skiprows=lambda i: (i+SR)%(GAP+1) and i!=0)
输出:
print(df)
estacion_id estacion_no sensor_id ... fecha_observacion metrica valor
0 90 PICACHO_MA 225 ... 01/01/2013 media 3.78
1 90 PICACHO_MA 225 ... 02/01/2013 media 4.48
2 90 PICACHO_M 225 ... 03/01/2013 media 2.39
3 90 PICACHO_M. 225 ... 04/01/2013 media 3.18
4 90 PICACHO_M. 225 ... 05/01/2013 media 3.86
5 90 PICACHO_MA 225 ... 06/01/2013 media 2.27
6 90 PICACHO_MA 225 ... 07/01/2013 media 2.42
7 90 PICACHO_MA 225 ... 08/01/2013 media 0.89
8 90 PICACHO_M. 225 ... 09/01/2013 media 2.07
9 90 PICACHO_M. 225 ... 10/01/2013 media 2.90
10 90 PICACHO M 225 ... 11/01/2013 media 3.95
中间体(可调用) :
index 0 # --> False (don't skip)
index 1 # --> True
index 2 # --> False (don't skip)
index 3 # --> True
index 4 # --> True
index 5 # --> True
index 6 # --> False (don't skip)
index 7 # --> True
index 8 # --> True
index 9 # --> True
index 10 # --> False (don't skip)
index 11 # --> True
index 12 # --> True
index 13 # --> True
index 14 # --> False (don't skip)
index 15 # --> True
index 16 # --> True
index 17 # --> True
index 18 # --> False (don't skip)
...
评论
1061
skiprows=lambda i: i%4 if (i==0 or 1061 < i < 2921) else True)
+-1
评论