如何在未知行数的Pandas DataFrame中按间隔选取指定行?
问题
我有一个包含数据的Pandas DataFrame,已经知道如何选取某一行,但需要在以下条件下选取若干行到新的DataFrame中:
- 不知道原DataFrame的总行数;
- 先选取第一行,之后按固定间隔选取后续行。
示例数据代码:
import pandas as pd import numpy as np df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(), 'B': 'one one two three two two one three'.split(), 'C': np.arange(8), 'D': np.arange(8) * 2}) print(df)
输出:
A B C D 0 foo one 0 0 1 bar one 1 2 2 foo two 2 4 3 bar three 3 6 4 foo two 4 8 5 bar two 5 10 6 foo one 6 12 7 foo three 7 14
期望结果:
- 间隔为4时,得到:
A B C D 0 foo one 0 0 4 foo two 4 8
- 间隔为3时,得到:
A B C D 0 foo one 0 0 3 bar three 3 6 6 foo one 6 12
解决方案
直接使用Pandas的iloc进行切片操作即可,语法为df.iloc[::间隔值],其中:
- 第一个空值表示从第0行(第一行)开始选取;
- 第二个空值表示一直选取到DataFrame的最后一行;
- 最后的间隔值就是你需要的固定间隔。
示例代码
间隔为4的情况
interval = 4 new_df = df.iloc[::interval] print(new_df)
输出与期望一致:
A B C D 0 foo one 0 0 4 foo two 4 8
间隔为3的情况
interval = 3 new_df = df.iloc[::interval] print(new_df)
输出与期望一致:
A B C D 0 foo one 0 0 3 bar three 3 6 6 foo one 6 12
这个方法不需要提前知道原DataFrame的行数,iloc会自动处理到最后一行,完全满足需求。
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

