根据条件从列表中删除数据帧

时间:2020-06-07 04:00:25

标签: python dataframe for-loop neural-network

晚上好

请问我遇到的Python问题是否可以得到帮助?我有一个很大的.csv文件(深21,600,000行,宽6列)。数据分为每组1000行的组(因此,我们有21,600个数据组)。我希望根据某些行是否包含不时出现的较大值(-3.4 * 10 ^ 38)来删除整个组。我编写了以下Python脚本:

# CALL-IN LIBRARIES
import pandas as pd
import numpy as np
import os
import logging

os.chdir('/media/Maps/test_runs/') #Set file directory.
map_data='map_combined.csv'

maps1 = pd.read_csv(coasts_data, header=None, encoding='latin1')

#Combine all data into a single frame

frames = [maps1] 
df = pd.concat(frames)

#### Arrange data so that each LoS vector of 1000 pts is in a single row #####

n = 1000  #chunk row size
list_df = [df[i:i+n] for i in range(0,df.shape[0],n)]

ind = 0
l=[]
for index,frame in enumerate(list_df):
        vals = frame[df.iloc[:,2]].values
        if np.all(vals > -100000):
             l.append(index)
for x in sorted(l, reverse=True):
    del list_df[x]

我试图将.csv文件分解为DataFrame列表,然后对每个DataFrame施加条件(删除任何包含值小于-100000的DataFrame,无关的值在数据的第2列中)。但是,该脚本只会使Spyder崩溃,并且不会显示任何错误消息。

作为检查,最终产品应该是行计数可以被1000整除的.csv(它将进入具有1000个节点输入层的神经网络,因此需要避免部分数据集)。

任何建议或想法都将不胜感激。

1 个答案:

答案 0 :(得分:0)

这不是有效的代码行:

if <-100000 not in vals:

相反,请使用:

if np.any(vals < -100000):

编辑:我想我现在已经了解了您的用例-请尝试以下操作:

l=[]
for index, frame in enumerate(list_df):
    vals = frame.iloc[:,2].values
    # if any values in this part of the frame are wrong, store index for deletion
    if np.any(vals < -100000):
         l.append(index)
for x in sorted(l, reverse=True):
    del list_df[x]
相关问题