Dataframe.resample()仅适用于时间序列数据。我无法从非时间序列数据中找到每n行。最好的方法是什么?
虽然@chrisb接受的答案确实回答了这个问题,但我想补充以下内容。
我使用一个简单的方法来获取第n个数据或删除第n行如下:
df1 = df[df.index % 3 != 0] # Excludes every 3rd row starting from 0
df2 = df[df.index % 3 == 0] # Selects every 3rd raw starting from 0
这种基于算法的采样能够支持更复杂的行选择。
当然,这假设您有一个从0开始的有序连续整数的索引列。
我有类似的要求,但我想要特定组中的第n项。我就是这样解出来的。
groups = data.groupby(['group_key'])
selection = groups['index_col'].apply(lambda x: x % 3 == 0)
subset = data[selection]
对于已接受的答案,还有一个更简单的解决方案,它涉及直接调用df.__getitem__。
df = pd.DataFrame('x', index=range(5), columns=list('abc'))
df
a b c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
例如,要获取每2行,您可以这样做
df[::2]
a b c
0 x x x
2 x x x
4 x x x
还有GroupBy。first/GroupBy。头,你在指数上分组:
df.index // 2
# Int64Index([0, 0, 1, 1, 2], dtype='int64')
df.groupby(df.index // 2).first()
# Alternatively,
# df.groupby(df.index // 2).head(1)
a b c
0 x x x
1 x x x
2 x x x
索引由stride(在本例中为2)逐层挖掘。如果索引是非数字的,则改为这样做
# df.groupby(np.arange(len(df)) // 2).first()
df.groupby(pd.RangeIndex(len(df)) // 2).first()
a b c
0 x x x
1 x x x
2 x x x
我在使用索引时提出的解决方案是不可行的(可能是multi-Gig .csv太大了,或者我错过了一些允许我重新索引而不会崩溃的技术)。 每次遍历一行,并将第n行添加到一个新的数据框架。
import pandas as pd
from csv import DictReader
def make_downsampled_df(filename, interval):
with open(filename, 'r') as read_obj:
csv_dict_reader = DictReader(read_obj)
column_names = csv_dict_reader.fieldnames
df = pd.DataFrame(columns=column_names)
for index, row in enumerate(csv_dict_reader):
if index % interval == 0:
print(str(row))
df = df.append(row, ignore_index=True)
return df
将reset_index()添加到metastableB的答案中允许您只需要假设行是有序且连续的。
df1 = df[df.reset_index().index % 3 != 0] # Excludes every 3rd row starting from 0
df2 = df[df.reset_index().index % 3 == 0] # Selects every 3rd row starting from 0
df.reset_index()。Index将创建一个从0开始,以1为增量的索引,允许您轻松使用模数。
推荐文章
- 每n行有熊猫
- 实例属性attribute_name定义在__init__之外
- 如何获取在Python中捕获的异常的名称?
- 第一次出现的值大于现有值的Numpy
- 如何从Python函数中返回两个值?
- 前一个月的Python日期
- Python中方括号括起来的列表和圆括号括起来的列表有什么区别?
- Python日志记录不输出任何东西
- 每n秒运行特定代码
- SQLAlchemy是否有与Django的get_or_create等价的函数?
- 如何将python datetime转换为字符串,具有可读格式的日期?
- 美丽的汤和提取div及其内容的ID
- 在Python中重置生成器对象
- 用Python构建最小的插件架构
- model.eval()在pytorch中做什么?