晚上好
请问我遇到的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个节点输入层的神经网络,因此需要避免部分数据集)。
任何建议或想法都将不胜感激。
答案 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]