Я хочу, чтобы кодировать значения столбца в панде dataframe - PullRequest
0 голосов
/ 01 июня 2018

Я хочу закодировать значения столбцов в pandas dataframe, например, все буквы должны быть преобразованы в одну букву (например, 'vault' до 'NNNNN', 'Nan123' до 'NNNDDD').

Я думаю о чем-то вроде этого:

df['TransDetails'] = df['TransDetails'].str.replace('A', 'N')

Мои данные:

    TransDetails
0   NEFT-PUNB0315500-JITENDER SING
1   NEFT-UTIB0CCH274-VIRENDER KUMA
2   NEFT-UTIB0CCH274-SUNITA DEVI
3   NEFT-PUNB0315500-AMLASH KUMAR
4   NEFT-PUNB0109800-FARIDUDDEN
5   NEFT-PUNB0109800-IDREESH
6   NEFT-PUNB0315500-BUDDHU
7   NEFT-UTIB0CCH274-SAKIL AHAMAD
8   NEFT-UTIB0CCH274-NAIM AHAMAD
9   NEFT-UTIB0CCH274-SALIM AHAMAD
10  NEFT-UTIB0CCH274-NADIM AHAMAD

Как я могу преобразовать все значения столбцов в таких кодах?Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Одним из способов будет использование df.replace().Вы бы не стали менять числовые столбцы таким образом.

df.replace('[A-Za-z]','N', regex=True).replace('\d','D', regex=True)

Полный пример с числовым столбцом с именем D, Не числовым с именем N и TransDetails.

import pandas as pd

data = '''\
D,N,TransDetails
1,ABC,NEFT-PUNB0315500-JITENDER SING
1,123,NEFT-UTIB0CCH274-VIRENDER KUMA
1,123,NEFT-UTIB0CCH274-SUNITA DEVI
1,123,NEFT-PUNB0315500-AMLASH KUMAR
1,123,NEFT-PUNB0109800-FARIDUDDEN
1,123,NEFT-PUNB0109800-IDREESH
1,123,NEFT-PUNB0315500-BUDDHU
1,123,NEFT-UTIB0CCH274-SAKIL AHAMAD
1,123,NEFT-UTIB0CCH274-NAIM AHAMAD
1,123,NEFT-UTIB0CCH274-SALIM AHAMAD
1,123,NEFT-UTIB0CCH274-NADIM AHAMAD'''

fileobj = pd.compat.StringIO(data) # or 'path/to/csv'
df = pd.read_csv(fileobj)
df = df.replace('[A-Za-z]','N', regex=True).replace('\d','D', regex=True)
print(df)

Возвращает:

    D    N                    TransDetails
0   1  NNN  NNNN-NNNNDDDDDDD-NNNNNNNN NNNN
1   1  DDD  NNNN-NNNNDNNNDDD-NNNNNNNN NNNN
2   1  DDD    NNNN-NNNNDNNNDDD-NNNNNN NNNN
3   1  DDD   NNNN-NNNNDDDDDDD-NNNNNN NNNNN
4   1  DDD     NNNN-NNNNDDDDDDD-NNNNNNNNNN
5   1  DDD        NNNN-NNNNDDDDDDD-NNNNNNN
6   1  DDD         NNNN-NNNNDDDDDDD-NNNNNN
7   1  DDD   NNNN-NNNNDNNNDDD-NNNNN NNNNNN
8   1  DDD    NNNN-NNNNDNNNDDD-NNNN NNNNNN
9   1  DDD   NNNN-NNNNDNNNDDD-NNNNN NNNNNN
10  1  DDD   NNNN-NNNNDNNNDDD-NNNNN NNNNNN
0 голосов
/ 01 июня 2018

Вы можете использовать регулярное выражение для обработки замены.

df['TransDetails'] = df['TransDetails'].str.replace('[A-Za-z]', 'N')
df['TransDetails'] = df['TransDetails'].str.replace('\d', 'D')

df
# returns:
                      TransDetails
0   NNNN-NNNNDDDDDDD-NNNNNNNN NNNN
1   NNNN-NNNNDNNNDDD-NNNNNNNN NNNN
2     NNNN-NNNNDNNNDDD-NNNNNN NNNN
3    NNNN-NNNNDDDDDDD-NNNNNN NNNNN
4      NNNN-NNNNDDDDDDD-NNNNNNNNNN
5         NNNN-NNNNDDDDDDD-NNNNNNN
6          NNNN-NNNNDDDDDDD-NNNNNN
7    NNNN-NNNNDNNNDDD-NNNNN NNNNNN
8     NNNN-NNNNDNNNDDD-NNNN NNNNNN
9    NNNN-NNNNDNNNDDD-NNNNN NNNNNN
10   NNNN-NNNNDNNNDDD-NNNNN NNNNNN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...