Как удалить пустые ячейки из набора данных CSV с помощью Python? - PullRequest
0 голосов
/ 04 октября 2018

Каждая строка представляет человека (всего 315), а каждый столбец представляет сценарий выбора (всего 16).Каждый человек ответил случайным образом на 4 последовательных сценария выбора.Я хочу, чтобы четыре столбца последовательно содержали ответы каждого человека и покончить с любой пустой ячейкой. Image of the excel sheet

import pandas as pd
df = pd.read_csv(r"C:\Users\Admin\Desktop\Book2.csv")
for (r,c) in df.iterrows():
if df.iat[r,c] is not None:
    for i in range(4):
        print(str(df.iat[r,c+i]))

ОБНОВЛЕНИЕ Мне удалосьполучить строку данных в список и сгруппировать их в группы по 4 (как мне это нужно).Теперь, как мне сохранить элементы со значениями, отличными от ''?

import csv
rowdata = []
with open(r'C:\Users\ARPLAB31\Desktop\SPdata.csv') as inputfile:
    reader = csv.reader(inputfile)
    rowdata = list(reader)
r= []
for i in range(1,718,1):
    for j in range(28):
        if len(rowdata[i][j])!=0:
            r.append(rowdata[i][j])
cardref = [r[x:x+4] for x in range(0, len(r),4)] '''cardref contains the partitioned data.'''
print(cardref)

ВЫХОД:

[['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['BB', 'BB', 'CC', 'CC'], ['', '', '',''], ['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['','', '', ''], ['CC', 'BB', 'CC', 'CC'], ['', '', '', ''], ['', '', '',' '], [' ',' ',' ',' '], [' ',' ',' ',' '], [' ',' ',' ',' '], ['CC ',' CC ',' CC ',' CC '], [' ',' ',' ',' '], [' ',' ',' ',' '], [' ',' ', '', ''], ['CC', 'CC', 'AA', 'CC'], ['', '', '', ''], ['', '', '',''], ['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['','', '', ''], ['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['CC', 'BB', 'CC', 'CC'], ['', '', '', ''], ['',' ',' ',' '], [' ',' ',' ',' '], [' ',' ',' ',' '], [' ',' ',' ','']]

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Вы можете прочитать каждую строку, получить ненулевые поля и создать оттуда новый CSV.

Например:

data = ",,2,2,2,2,,,"
arr = filter(None, data.split(",")) #removes null fields
",".join(arr) #"2,2,2,2"
0 голосов
/ 05 октября 2018

Спасибо всем вам.Мне довелось решить мою проблему с помощью всех приведенных выше комментариев.Пожалуйста, укажите любые изменения кода в комментарии.

import pandas
import csv
rowdata = []

''' READING CSV INTO LIST'''

with open('FILE.csv') as inputfile:
    reader = csv.reader(inputfile)
    rowdata = list(reader)

'''RECORDING THE POSITION OF NON-EMPTY ELEMENTS'''

r= []
for i in range(1,718,1):
    for j in range(28):
        if len(rowdata[i][j])!=0:
            r.append(j)
    continue

''' RE-GROUPING LIST AS LIST IN LIST'''

resp_index = [r[x:x+4] for x in range(0, len(r),4)]
print(resp_index)
print(len(resp_index))

'''ELIMINATING BLANK SPACES AND STORING INTO NEW LIST'''

s= []
for i in range(1,718,1):
    for j in range(28):
        if len(rowdata[i][j])!=0:
            s.append(rowdata[i][j])

''' RE-GROUPING LIST AS LIST IN LIST'''

resp_main = [s[x:x+4] for x in range(0, len(s),4)]
print(resp_main)
print(len(resp_main))
pd = pandas.DataFrame(resp_index)
pe = pandas.DataFrame(resp_main)

'''SAVING TO CSV FILES'''

pd.to_csv('INDEX.csv') 
pe.to_csv('RESPONSE.csv')
0 голосов
/ 04 октября 2018

Используйте df.isnull () [где df - пандас данных фрейма]

Хороший ресурс для поиска нулевого значения в фрейме данных панд.

https://dzone.com/articles/pandas-find-rows-where-columnfield-is-null

...