Python .map()不是';t用新的字典字符串替换字符串

Python .map()不是';t用新的字典字符串替换字符串,python,Python,我真的很感谢你在这方面的帮助 import glob as glob import pandas as pd files = glob.glob('CASTp_Total/**/*.pocInfo') pdb = pd.read_excel("C:/Users/User/Documents/Research/6 - CASTp/CASTp-outputs-v3.xlsx") code = pdb['PDB code'] long = pdb['CASTp job

我真的很感谢你在这方面的帮助

    import glob as glob
import pandas as pd

files = glob.glob('CASTp_Total/**/*.pocInfo')

pdb = pd.read_excel("C:/Users/User/Documents/Research/6 - CASTp/CASTp-outputs-v3.xlsx")
code = pdb['PDB code']
long = pdb['CASTp job name (1.4A)']
res = {long[i]: code[i] for i in range(len(long))}

for file in files:
    df = pd.read_csv(file , sep ='\t') # if only the first sheet is needed.   
    df['PDB'].map(res)
    df.to_csv(out, sep = '\t') 

基本上,我创建了一个字典来映射数据帧中的当前字符串。当我运行python脚本时,我最终得到了相同的原始值,并且映射不会发生。我从一个很长的excel文件中抓取字典,其中包含太多的值,无法放在本文中。

问题是由于
df['PDB'].map(res)
。您的代码将返回一个新的dataframe对象,而不是更改现有的
df
dataframe中的
“PDB”
列。因此,当您执行
df.to_csv(out,sep='\t')
时,您仍然引用原始的、未更改的数据帧

要解决这个问题,您可以将
df['PDB'].map(res)
替换为
df['PDB']=df['PDB'].map(res)
。循环将如下所示:

for file in files:
    df = pd.read_csv(file , sep ='\t')
    df['PDB'] = df['PDB'].map(res)
    df.to_csv(out, sep = '\t') 

既然人们没有你的数据集,你能发布一个吗?此外,请显示预期/实际输出。谢谢