Dataframe.resample()仅适用于时间序列数据。我无法从非时间序列数据中找到每n行。最好的方法是什么?
当前回答
我在使用索引时提出的解决方案是不可行的(可能是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为增量的索引,允许您轻松使用模数。
我将使用iloc,它接受一个行/列切片,既基于整数位置,又遵循正常的python语法。如果你想要每5行:
df.iloc[::5, :]
df.drop(labels=df[df.index % 3 != 0].index, axis=0) # every 3rd row (mod 3)
虽然@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]
推荐文章
- ValueError: numpy。Ndarray大小改变,可能表示二进制不兼容。期望从C头得到88,从PyObject得到80
- Anaconda /conda -安装特定的软件包版本
- 我在哪里调用Keras的BatchNormalization函数?
- 打印测试执行时间并使用py.test锁定缓慢的测试
- 插入一行到熊猫数据框架
- 要列出Pandas DataFrame列
- 在Django模型中存储电话号码的最佳方法是什么?
- 从导入的模块中模拟函数
- 滚动或滑动窗口迭代器?
- python的方法找到最大值和它的索引在一个列表?
- 如何读取文件的前N行?
- 如何删除matplotlib中的顶部和右侧轴?
- 解析.py文件,读取AST,修改它,然后写回修改后的源代码
- Visual Studio Code:如何调试Python脚本的参数
- 使用元组/列表等等。从输入vs直接引用类型如list/tuple/etc