Python - 将一个很长的字符串替换成整数
Python - Replace a very long string into integer
我有一个巨大的数据集,我正在寻求改进方法以更高效地使用它。一种替代方法是用整数替换字符串 (id)。但是,我需要以最有效(使用更少的 RAM)的方式进行这种转换。目前我会做:
import pandas as pd
df = pd.DataFrame({'Customer_ID': ['AWE','GRA', 'GRA', 'FAOOS', '1293912ASJDAS', '1293912ASJDAS', '1293912ASJDAS'],
'X2': [76,858,68,678,8678,78,6788],
'X3': [312,3123,123,54,3523,56,2346]})
unique_ids = df['Customer_ID'].drop_duplicates().tolist()
df_ = pd.DataFrame({'unique_ids': unique_ids,
'int_ids': list(range(0,len(unique_ids)))
})
df.merge(df_, how='left', left_on='Customer_ID', right_on='unique_ids').drop(['Customer_ID', 'unique_ids'], axis=1)
但是耗时太长(真实数据有20M行)而且内存也很大,请问有什么办法可以改善吗? (欢迎使用任何有效的软件包来完成此特定任务)
使用
df['id'] = df.Customer_ID.astype('category').cat.codes
df
Customer_ID X2 X3 id
0 AWE 76 312 1
1 GRA 858 3123 3
2 GRA 68 123 3
3 FAOOS 678 54 2
4 1293912ASJDAS 8678 3523 0
5 1293912ASJDAS 78 56 0
6 1293912ASJDAS 6788 2346 0
我有一个巨大的数据集,我正在寻求改进方法以更高效地使用它。一种替代方法是用整数替换字符串 (id)。但是,我需要以最有效(使用更少的 RAM)的方式进行这种转换。目前我会做:
import pandas as pd
df = pd.DataFrame({'Customer_ID': ['AWE','GRA', 'GRA', 'FAOOS', '1293912ASJDAS', '1293912ASJDAS', '1293912ASJDAS'],
'X2': [76,858,68,678,8678,78,6788],
'X3': [312,3123,123,54,3523,56,2346]})
unique_ids = df['Customer_ID'].drop_duplicates().tolist()
df_ = pd.DataFrame({'unique_ids': unique_ids,
'int_ids': list(range(0,len(unique_ids)))
})
df.merge(df_, how='left', left_on='Customer_ID', right_on='unique_ids').drop(['Customer_ID', 'unique_ids'], axis=1)
但是耗时太长(真实数据有20M行)而且内存也很大,请问有什么办法可以改善吗? (欢迎使用任何有效的软件包来完成此特定任务)
使用
df['id'] = df.Customer_ID.astype('category').cat.codes
df
Customer_ID X2 X3 id
0 AWE 76 312 1
1 GRA 858 3123 3
2 GRA 68 123 3
3 FAOOS 678 54 2
4 1293912ASJDAS 8678 3523 0
5 1293912ASJDAS 78 56 0
6 1293912ASJDAS 6788 2346 0