Данная программа для замены строки на последовательность чисел должна быть написана в пандах - PullRequest
0 голосов
/ 02 ноября 2018

Привет всем, у меня есть программа, которая читает файл csv и заменяет строку на последовательность чисел, и у нее есть другой столбец, такой как дата / время, который должен печатать дату только для всех операций, эта программа работает очень хорошо, но я хочу, чтобы эта программа в 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 data[key][i] == "":
           data[key][i] = datetime.datetime.now().isoformat()

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 

Это желаемый результат:

job_Id  Name    Address Email   Date/Time

1      1       1       1    12/10/2011

2      2       1       1    12/11/2011

3      3       2       2    11/02/2018

4      4       2       3    09/12/2010

5      5       1       4    11/02/2018

6      6       3       1    12/11/2012

7      2       2       1    11/02/2018

8      3       3       2    07/10/2013

9      1       4       5    03/03/2018

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

1 Ответ

0 голосов
/ 02 ноября 2018

Используйте split с str[0] для выбора первых списков и замены на дату / время, преобразованные в строки на Timestamp.strftime:

now = pd.datetime.now().strftime('%d/%m/%Y')
df['Date/Time'] = df['Date/Time'].str.split(':').str[0].fillna(now)

Альтернативой является преобразование столбца to_datetime, замените отсутствующие значения на текущее и в последний раз преобразуйте его в строки на Series.dt.strftime:

df['Date/Time'] = (pd.to_datetime(df['Date/Time'], format='%d/%m/%Y:%H:%M:%S')
                     .fillna(pd.datetime.now())
                     .dt.strftime('%d/%m/%Y'))

А затем используйте factorize с apply для процессов с несколькими столбцами:

cols = ['Name','Address','Email']
df[cols] = df[cols].apply(lambda x: pd.factorize(x)[0] + 1)
print (df)
   job_Id  Name  Address  Email   Date/Time
0       1     1        1      1  12/10/2011
1       2     2        1      1  12/11/2011
2       3     3        2      2  02/11/2018
3       4     4        2      3  09/12/2010
4       5     5        1      4  02/11/2018
5       6     6        3      1  12/11/2012
6       7     2        2      1  02/11/2018
7       8     3        3      2  07/10/2013
8       9     1        4      5  03/03/2018
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...