【问题标题】:Elegant Way to Swap Doubles With Strings In Pandas Dataframe?在 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)

【问题讨论】:

  • 你确定你的文本文件是这样分隔的吗?看起来可能是标签。

标签: python pandas dataframe


【解决方案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)

【讨论】:

  • 和上面很像,这也是一个很好的工具,谢谢你的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
相关资源
最近更新 更多