Пустая ячейка в столбце должна заменить на текущую дату в python

У меня проблема в том, что у меня есть столбец даты / времени, в котором некоторые столбцы пусты, тогда я хочу заменить это пустая ячейка с сегодняшней датой, как он будет работать, тот же код, который я написал, пожалуйста, помогите с этим ....... обратите внимание, что я использую Pandas Dataframe, поэтому ответ не должен содержать никаких данных .. спасибо

with open(tempFile, 'r',encoding="utf8") as csvfile:
        # creating a csv reader object 
        reader = csv.DictReader(csvfile, delimiter=',')
    #     next(reader, None)

        '''We then restructure the data to be a set of keys with list of values {key_1: [], key_2: []}:'''        
        data = {}
        for row in reader:
    #         print(row)
            for header, value in row.items():
                try:
                    data[header].append(value)
                except KeyError:
                    data[header] = [value]

        '''Next we want to give each value in each list a unique identifier.'''            
        # Loop through all keys
        for key in data.keys():
            values = data[key]

            things = list(sorted(set(values), key=values.index))

            for i, x in enumerate(data[key]):

                if key==("Date/Time") :
                    data[key][i] = data[key][i][0:10]
                else:
                    data[key][i] = things.index(x) + 1

    """Since csv.writerows() takes a list but treats it as a row, we need to restructure our 
        data so that each row is one value from each list. This can be accomplished using zip():"""

    with open('ram5.csv', "w") as outfile:
        writer = csv.writer(outfile)
        # Write headers
        writer.writerow(data.keys())
        # Make one row equal to one value from each list
        rows = zip(*data.values())
        # Write rows
        writer.writerows(rows)

Этот код выполняет другие операции, также, пожалуйста, сосредоточьтесь только на столбце даты и времени. входные данные:

job_Id      Name        Address     Email            Date/Time
1        snehil singh   marathalli  ss@gmail.com     12/10/2011:02:03:20
2        salman         marathalli  ss@gmail.com     12/11/2011:03:10:20
3        Amir           HSR         ar@gmail.com    
4        Rakhesh        HSR         rakesh@gmail.com 09/12/2010:02:03:55
5        Ram            marathalli  r@gmail.com 
6        Shyam          BTM         ss@gmail.com     12/11/2012:01:03:20
7        salman         HSR         ss@gmail.com    
8        Amir           BTM         ar@gmail.com     07/10/2013:04:02:30
9        snehil singh   Majestic    sne@gmail.com    03/03/2018:02:03:20 

Пустой столбец даты / времени следует заменить на текущую дату ... Я пытался вставить между кодом ... но это не работает, пожалуйста, помогите мне ... спасибо

if["Date/Time"]==None:
                    data[key][i]="11/12/2018"
                else:
                    data[key][i] = data[key][i][0:10]
                    continue

мой код работал таким образом:

if data[key][i] == "":
   data[key][i] = datetime.datetime.now().isoformat()

спасибо Evryone за помощь

что здесь есть клавиша "Post until", также я думаю, что значения не None, они будут пустой строкой

Vikas P 31.10.2018 12:29

srry, это была ошибка, теперь она отредактирована

snehil singh 31.10.2018 13:02
0
2
1 474
2

Ответы 2

Вы можете выбрать пустые ячейки столбца, используя .loc и .isnull (), и вы можете получить текущее время с помощью библиотеки datetime. В целом это должно работать так:

import datetime
data.loc[data['Date/Time'].isnull(), 'Date/Time'] = datetime.datetime.now()

Сэр, я получаю эту ошибку: AttributeError: объект 'dict' не имеет атрибута 'loc'

snehil singh 31.10.2018 12:49

Это потому, что данные - это словарь, а не фрейм данных. Замените «данные» именем фрейма данных, в котором есть значения, которые вы хотите заменить.

Márcio Coelho 31.10.2018 12:52

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

snehil singh 31.10.2018 12:55

Можете ли вы добавить свои данные, о которых идет речь, это поможет нам найти решение

Vikas P 31.10.2018 12:57

Я ввел полные входные данные в свой код, см. выше

snehil singh 31.10.2018 12:59

Какую ошибку вы получаете при первоначальной попытке?

Márcio Coelho 31.10.2018 13:23

получил это так: if data [key] [i] == "": data [key] [i] = datetime.datetime.now (). isoformat ()

snehil singh 31.10.2018 13:25

Попробуй это :

for each in data:
    if not each['Date/Time']:
       each['Date/Time']=datetime.datetime.now()

я получаю сообщение об ошибке: TypeError: строковые индексы должны быть целыми числами

snehil singh 31.10.2018 13:07

В какой строке вы добавляете этот код, также вам предоставляются входные данные, такие как dataframe, можете ли вы указать данные dict, которые вы пытаетесь изменить?

Vikas P 31.10.2018 13:10

Я добавляю цикл for в это: for i, x in enumerate (data [key]): на самом деле я не понимаю, куда добавить

snehil singh 31.10.2018 13:12

Другие вопросы по теме