在 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 中用字符串交换双精度的优雅方法?的主要内容,如果未能解决你的问题,请参考以下文章

在 Pandas DataFrame 中用 None 替换无效值

如何在熊猫中用 NaN 替换浮点值?

文摘:DataFrame数据清洗

pandas从数据库读取数据

如何用python将dataframe更新原来的sql表

在 Scala 中用不同的 DataType 展平一个 DataFrame