Python 熊猫数据帧将索引提升到超出范围
我使用只保留数据帧的某些行(一列中的值与特定正则表达式模式匹配的行) 为此,我正在构建一个索引列表,以在循环中检查每一行是否与模式匹配:Python 熊猫数据帧将索引提升到超出范围,python,pandas,dataframe,chunks,Python,Pandas,Dataframe,Chunks,我使用只保留数据帧的某些行(一列中的值与特定正则表达式模式匹配的行) 为此,我正在构建一个索引列表,以在循环中检查每一行是否与模式匹配: for index, row in combined_csv.iterrows(): if re.match(regex_files_to_keep, row['commit_file']): indices_to_keep.append(index) 因此,索引值由返回 我的数据集存储为CSV文件。它太大了,无法一次读取,我使
for index, row in combined_csv.iterrows():
if re.match(regex_files_to_keep, row['commit_file']):
indices_to_keep.append(index)
因此,索引值由返回
我的数据集存储为CSV文件。它太大了,无法一次读取,我使用的是的chunksize参数
应用于第一个块的take
可以正常工作。但是,从第二个块开始,它会引发以下错误:
索引器:索引超出范围
我打印了数据帧的第一个和最后一个元素的列表值和索引(使用combined\u csv.index[0]
和combined\u csv.index[-1]
)。索引u to_keep
列表中的所有值都在数据帧的第一个和最后一个元素的索引定义的边界内
为什么我会出现这个错误?答案是该方法将当前数据帧中要删除的行的位置作为参数,而不是其索引。混淆源于参数名,即索引,但文档明确指出:
指示要采取的位置的整数数组
让我用一个例子来解释这个区别
假设你有40000块。然后,从第二个块构建的数据帧的第一个索引将是40000。但是,此行的位置为0,这是take
所期望的位置值
这就是为什么需要从索引中减去已通过的行数(chunksize*(chunk\u number-1))。我对应的代码行是:
indices_to_keep = [x - (chunk_size * (chunk_number - 1)) for x in indices_to_keep]
现在您有了一个要保留的行的位置列表,您可以按预期使用take
如果词汇表(位置和索引)不合适,请告诉我,以便我更正。我不是以英语为母语的人,这些单词的意思在这个问题上非常重要