在 Pandas Dataframe 中用字符串交换双精度的优雅方法?
Posted
技术标签:
【中文标题】在 Pandas Dataframe 中用字符串交换双精度的优雅方法?【英文标题】:Elegant Way to Swap Doubles With Strings In Pandas Dataframe? 【发布时间】:2022-01-24 01:25:45 【问题描述】:我目前有一个数据框,其中有一列标题为“工作代码”。 Job Code 可以包含六百种不同的 Int 值之一。
每个 Int 对应一个我目前在记事本中列出的字符串值,如下所示:
119 student
120 construction worker
121 baker
122 teacher
我想知道,有没有一种优雅的方法可以用记事本文件中的相应字符串替换“工作代码”列中的数字?
我目前正在使用以下方法,但我确信必须有一个比手动在 jobStrings 中键入所有 600 个代码更优化的解决方案。
jobStrings =
119: "student",
120: "construction worker",
121: "baker",
122: "teacher",
df["jobCode"].replace(jobStrings, inplace=True)
【问题讨论】:
你确定你的文本文件是这样分隔的吗?看起来可能是标签。 【参考方案1】:以 CSV 格式读取您的文本文件并使用它来映射/替换:
maps = pd.read_csv('textfile.txt', sep='(?<=\d)\s', names=['code', 'name']).set_index('code')['name']
df["jobCode"] = df["jobCode"].map(maps)
注意。如果前面有数字,则使用空格作为分隔符。如果字符串中有数字,请告诉我以查找替代项
地图内容:
code
119 student
120 construction worker
121 baker
122 teacher
Name: name, dtype: object
【讨论】:
这太棒了——你刚刚教会了我一种处理文本文件的全新方法,谢谢! 是的,当你可以使用 pandas 时,它就很棒。当你不能使用它时,我的解决方案会更好......这种情况并不常见;)【参考方案2】:这是一个快速(未经测试)的解决方案:
with open("your_file.txt") as f:
text = f.read().strip()
lines = re.split(r'[\r\n]+', text)
lines = dict([re.split(r'\s+', l) for l in lines])
new_dict =
for key in lines.keys():
new_dict[int(key)] = lines[key]
df["jobCode"].replace(new_dict, inplace=True)
【讨论】:
和上面很像,这也是一个很好的工具,谢谢你的回答!以上是关于在 Pandas Dataframe 中用字符串交换双精度的优雅方法?的主要内容,如果未能解决你的问题,请参考以下文章