Python 映射后的数字格式?
我有一个带有数字列的数据框,例如:Python 映射后的数字格式?,python,pandas,dictionary,replace,Python,Pandas,Dictionary,Replace,我有一个带有数字列的数据框,例如: CompteNum 100 200 300 400 500 以及一个将所有这些数字映射到其他数字的文件,我将其导入python并转换为字典: {100: 1; 200:2; 300:3; 400:4; 500:5} 我在数据框中创建了第二列,以df number+dict number的格式将两个数字组合在一起:从100到1001,依此类推 ## dictionary accounts = pd.read_excel("mapping-accounts.x
CompteNum
100
200
300
400
500
以及一个将所有这些数字映射到其他数字的文件,我将其导入python并转换为字典:
{100: 1; 200:2; 300:3; 400:4; 500:5}
我在数据框中创建了第二列,以df number+dict number的格式将两个数字组合在一起:从100到1001,依此类推
## dictionary
accounts = pd.read_excel("mapping-accounts.xlsx")
accounts = accounts[['G/L Account #','FrMap']]
accounts = accounts.set_index('G/L Account #').to_dict()['FrMap']
## data frame --> CompteNum is the Number Column
df['CompteNum'] = df['CompteNum'].map(accounts1).astype(str) + df['CompteNum'].astype(str)
问题是我的输出是100.01.0而不是1001,这会在输出excel文件中创建额外的手动工作。我试过:
df['CompteNum'] = df['CompteNum'].str.replace('.0', '')
但它不会删除所有的零,我希望删除其他的零。有什么建议吗?映射后的非匹配值缺少值,可能的解决方案是:
print (df)
CompteNum
0 100
1 200
2 300
3 400
4 500
5 40
accounts1 = {100: 1, 200:2, 300:3, 400:4, 500:5}
s = df['CompteNum'].astype(str)
s1 = df['CompteNum'].map(accounts1).dropna().astype(int).astype(str)
df['CompteNum'] = (s + s1).fillna(s)
print (df)
CompteNum
0 1001
1 2002
2 3003
3 4004
4 5005
5 40
您的解决方案应该更改为replace by regex-$
以转义
作为字符串结尾,因为特殊的regex字符(regex any char):
map
之后的非匹配值存在缺少值的问题,可能的解决方案是:
print (df)
CompteNum
0 100
1 200
2 300
3 400
4 500
5 40
accounts1 = {100: 1, 200:2, 300:3, 400:4, 500:5}
s = df['CompteNum'].astype(str)
s1 = df['CompteNum'].map(accounts1).dropna().astype(int).astype(str)
df['CompteNum'] = (s + s1).fillna(s)
print (df)
CompteNum
0 1001
1 2002
2 3003
3 4004
4 5005
5 40
您的解决方案应该更改为replace by regex-$
以转义
作为字符串结尾,因为特殊的regex字符(regex any char):