Как обнаружить и скрыть недостающие данные в импортированных CSV-файлах в Python?

1

Я очень новичок в Python, и я пытался обнаружить недостающие данные в списках, созданных из данных в импортированных файлах csv, чтобы я мог построить серию с использованием matplotlib без получения ошибки.

Я покажу вам, что у меня есть:

import numpy as np
# import matplotlib.pyplot as plt
import csv
from pylab import *

res = csv.reader(open('cvs_file_with_data.csv'), delimiter=',')
res.next() # do not read header

ColOneData = []
ColTwoData = []
ColThreeData = []

for col in res:
    ColOneData.append(col[0])
    ColTwoData.append(col[1])
    ColThreeData.append(col[2])

print ColOneData # I got here the following ['1', '2', '3', '4', '5'] 

print ColTwoData # I got here the following ['1', '2', '', '', '5']

print ColThreeData # I got here the following ['', '', '3', '4', '']

ColTwoData_M = np.ma.masked_where(ColTwoData == '', ColTwoData) # This does not work

Мне нужно замаскировать пустые значения, например '', чтобы я мог построить серию без ошибок. Любое предложение решить эту проблему?

С уважением...

Теги:

3 ответа

1
Лучший ответ

Что вы подразумеваете под маской? Удалить? Если да, попробуйте следующее:

masked_data = [point for point in data if point != '']

Редактировать:

Я не привык к numpy, но, возможно, это то, что вы ищете:

>>> data = numpy.array(['0', '', '1', '', '2'])
>>> numpy.ma.masked_where(data == '', data)
masked_array(data = [0 -- 1 -- 2],
             mask = [False True False True False],
       fill_value = N/A)
  • 0
    Привет, Джена, я не хочу удалять пустые или отсутствующие данные из списка. Мне нужно замаскировать его так, чтобы при построении с использованием matplotlib соответствующая отметка была пустой. Например, если я попытаюсь построить ColOneData против ColTwoData, как они есть сейчас, я получу ошибку. 'plt.plot (ColOneData, ColTwoData) # Это приведет к ошибке show ()'
  • 0
    @Jose: что если недостающие данные представлены как '0' . Это заговор правильно?
1

Хосе, если вы хотите построить столбец1 против столбца2 и не иметь пустых элементов, вызывающих ошибки, вам придется удалить пустые элементы в столбце2 вместе с соответствующими элементами в столбце1. Функция, подобная следующей, должна делать трюк.

def remove_empty(col1, col2):
    # make copies so our modifications don't clobber the original lists
    col1 = list(col1) 
    col2 = list(col2)
    i = 0
    while i < len(col1):
        # if either the item in col1 or col2 is empty remove both of them
        if col1[i] == '' or col2[i] == '':
            del col1[i]
            del col2[i]
        # otherwise, increment the index
        else: i+=1
    return col1, col2
1

Если то, что вы хотите сделать, это добавить значение заливки в пустые узлы, вы можете сделать что-то вроде этого:

def defaultIfEmpty(a):
    if a == '':
        return '0'

    return a

x = ['0', '', '2', '3', '']
map (defaultIfEmpty,x)

result: x = ['0', '0', '2', '3', '0']

Если это результат, который вы ищете, вы можете map(defaultIfEmpty,ColOneData) затем ColTwoData и т.д.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню