我想对pandas数据帧中的列值进行编码,例如所有字母应转换为单个字母(例如,'vault'
到'NNNNN'
,'Nan123'
到{ {1}})。
我在考虑这样的事情:
'NNNDDD'
我的数据:
df['TransDetails'] = df['TransDetails'].str.replace('A', 'N')
如何转换此类代码中的所有列值?提前致谢
答案 0 :(得分:1)
您可以使用正则表达式来处理替换。
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
答案 1 :(得分:1)
一种方法是使用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