【问题标题】:Transform group of rows separated by "##" to multiple columns. - In Python将由“##”分隔的行组转换为多列。 - 在 Python 中
【发布时间】:2021-06-09 16:58:46
【问题描述】:

如何将由字符串“##”(或任何字符串)分隔的单行转换为列。

抱歉,我知道这很容易,但我只是 python 新手。

样本数据:

输出:

我已经尝试过了,但结果不是我想要的: 数据 = [] idx = df[df["Errors"].eq("##")].index

for i in Idx:
    df1 = df["Errors"].iloc[::i+1].reset_index(drop=True)
    data.append(df1)
    out = pd.concat(data, axis="columns").T.reset_index(drop=True)

结果:

感谢任何人的帮助。 谢谢。

【问题讨论】:

  • Pandas 并不是特别擅长处理可变长度行的数据。你真的需要熊猫吗?从文件中读取到列表列表很容易。
  • 您还应该将示例数据发布为文本而不是屏幕截图。数据是 CSV 吗?是在 Excel 中吗?已经有数据框了吗?
  • @TimRoberts 我正在做一个转换数千行机器日志的项目,我真的不知道哪个更好用,panda 还是 numpy。
  • 除非数据是数字(这不是数字),否则我不知道pandasnumpy 会给你带来什么。也许如果您正在计算错误频率的统计信息,那就是您进入pandas 的时候。
  • @sedavidw 它来自以“.LOG 为扩展名的机器日志。我需要先在 excel 中打开它然后另存为 excel 格式。然后我转换为数据框并需要将结果显示给 Tkinker树视图。

标签: python pandas numpy transform


【解决方案1】:

考虑这种非熊猫方法:


data = []
row = []
for line in open('x.txt'):
    line = line.strip()
    if line == "##":
        if row:
            data.append(row)
            row = []
    row.append(line)
if row:
    data.append(row)

from pprint import pprint
pprint(data)

输出:

[['##', 'ERROR #123 <SHTL>', 'Error1', 'Error1', 'Error1'],
 ['##', 'ERROR #124 <NSOP>', 'Error2', 'Error2', 'Error2'],
 ['##', 'ERROR #124 <NSOP>', 'Error3', 'Error3', 'Error3', 'Error3', 'Error3'],
 ['##', 'ERROR #111 <NSOL>', 'Error4', 'Error4', 'Error4'],
 ['##',
  'ERROR #111 <NSOL>',
  'Error5',
  'Error5',
  'Error5',
  'Error5',
  'Error5',
  'Error5',
  'Error5'],
 ['##', 'ERROR #128 <PBI>', 'Error6', 'Error6', 'Error6', 'Error6']]

【讨论】:

  • 谢谢先生。我会试试的。
  • 先生,我无法应用代码,原始格式为 .xlsx 格式。如果要导入的文件在excel中,还有其他的吗?
  • 好吧,您可以使用df.iloc 来遍历导入的数据框,而不是像我的示例那样使用文件。
【解决方案2】:

经过数小时的反复试验。

我发现这段代码有效。:

data = []
Idx1 = df[df["Errors"].eq("##")].index
Idx2 = Idx1[1:] #to know the limit between "##".

for i1, i2 in zip(Idx1, Idx2):
    df1 = df["Errors"].loc[i1+1:i2-1].reset_index(drop=True)
    data.append(df1)
out = pd.concat(data, axis="columns").T.reset_index(drop=True)
print(out)

这是基于我之前关于线程的问题: How to transpose rows separated with blank (Nan) data to multi-column in python/pandas?

感谢@Corralien。

但请给我发送其他改进方法。 谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 2022-12-10
    • 2020-04-07
    • 2014-08-13
    相关资源
    最近更新 更多