【问题标题】:make summary data frame from a string input从字符串输入制作摘要数据框
【发布时间】:2021-06-16 05:02:15
【问题描述】:

我正在尝试总结一个日志字符串。

trn_log = "Item1   10  Item2   1  Item1  -5  Item3   40  Item2   -1"

如果我们总结为 2 行 2 列的数据框,我们会得到一个这样的列表 项目 1 5 第 3 项 40

结果数据框的行应该自动调整

所以

trn_log = "Item1   10  Item2   5  Item1  -5  Item3   40  Item2   -1"

生成的数据框是

项目 1 5 项目 2 4 第 3 项 40

我正在使用 python 3

【问题讨论】:

  • 请澄清您所说的“我正在尝试总结一个日志字符串”是什么意思。要将字符串转换为具有两列的数据框,还是其他?
  • 是的,如果可以转换一切都很好
  • 我已经尝试过 data = pd.DataFrame(io.StringIO(ransaction_log)) 但我得到 \n 并且只得到一列,项目应该在一列中,数字在另一列中

标签: python-3.x


【解决方案1】:

根据您的输入执行以下操作:

import pandas as pd

def build_frame(tl):
    itms = []
    vals = []
    for ntry in tl.split(" "):
        if ntry:
            if ntry[:3].lower() == 'ite':
                itms.append(ntry)
            else:
                vals.append(int(ntry))
    return pd.DataFrame({'Items': itms, 'Values':vals})    

然后执行build_frame(trn_log) 产生:

    Items   Values
0   Item1   10
1   Item2   1
2   Item1   -5
3   Item3   40
4   Item2   -1

【讨论】:

  • Machine- Win 10, Anaconda, Python 3.7 ValueError Traceback in 11 vals.append(int(ntry)) 12 return pd.DataFrame({'项目':itms,'值':vals})---> 13 build_frame(ransaction_log) in build_frame(tl)9 itms.append(ntry)10 else:---> 11 vals.append(int(ntry)) 12 return pd.DataFrame({'Items': itms, 'Values':vals}) 13 build_frame(ransaction_log) ValueError: int() 基数为 10 的无效文字:'\nItem1'
  • 您的错误告诉我您的输入 trn_log 看起来不像您的示例,字符串中似乎有 '\n' 字符。请验证用于运行脚本的 trn_log 是否与您的示例相似或更新示例以显示真实的 trn_log 数据
猜你喜欢
  • 2014-03-28
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 2022-11-13
  • 2011-07-08
  • 2022-11-05
  • 1970-01-01
  • 2018-11-07
相关资源
最近更新 更多