如何将以特定字符串开头的每多行转换为列?

时间:2019-06-22 18:53:20

标签: python dataframe reshape transpose

我想问一下如何将多行转换为列并使用python保存到文本文件中吗?我在以下部分附加了输入和预期的输出。根据输入,我想选择以“ number”开头的每一行,然后转置为列。

最后,我想将预期的输出保存到文本文件中。

输入:

number 
12
apple
13
banana
14
number
1
carrot
2
cucumber
3
number 
11
pen
10

预期输出:

number    12     apple     13     banana       14
number    1      carrot    2      cucumber     3
number    11     pen       10

任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:0)

首先让我们将数据加载到内存中

with open('input.txt', 'r') as data:
    info = data.read()
info = info.split()

现在让我们将数据配对为(name, number)元组:

list_of_tuples = [(name, int(info[index+1])) for name, index in enumerate(info)]

现在找到您的行:

list_of_rows = []
cur_row = []
for tuple in list_of_tuples:
    if tuple[0] == 'number':
         if len(cur_row) > 0:
              list_of_rows.append(cur_row)
              cur_row.clear()
         cur_row.append(tuple)
list_of_rows.append(cur_row)

现在将其加载到文本文件中:

with open('out.txt', 'w') as out:
     for row in list_of_rows:
          out.write('\t'.join(row))

代码是令人难以置信的,所以如果您遇到问题,请告诉我...

答案 1 :(得分:0)

关于读写文本文件还存在其他问题,因此,我将作为练习来留给您。

假设您已经以records的形式加载了输入文件:

records = ['number', '12', 'apple', '13', 'banana', '14', 'number', '1', 'carrot', '2', 'cucumber', '3', 'number', '11', 'pen', '10']

您想要做的是循环遍历每个record,如果是'number',则创建一个新行,然后将record添加到最新行。这段代码可以做到:

rows = []
for record in records:
    if record == 'number':
        # Create a new row
        rows.append([])
    # Append to the last row
    rows[-1].append(record)

rows将是这样:

[['number', '12', 'apple', '13', 'banana', '14'],
 ['number', '1', 'carrot', '2', 'cucumber', '3'],
 ['number', '11', 'pen', '10']]