Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将以特定字符串开头的多行转换为列?_Python_Dataframe_Reshape_Transpose - Fatal编程技术网

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

Python 如何将以特定字符串开头的多行转换为列?,python,dataframe,reshape,transpose,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

我想问一下如何使用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

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

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

with open('input.txt', 'r') as data:
    info = data.read()
info = info.split()
现在,让我们将数据配对成
(名称、编号)
元组:

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))

代码是头脑编译的,所以如果您遇到问题,请告诉我…

关于阅读和编写文本文件还有其他问题,所以我将把这些留给您作为练习

假设您已将输入文件加载为
记录

records = ['number', '12', 'apple', '13', 'banana', '14', 'number', '1', 'carrot', '2', 'cucumber', '3', 'number', '11', 'pen', '10']
您要做的是循环每个
记录
,如果它是
“number”
,则创建一个新行,然后将
记录
添加到最近的一行。该代码的作用是:

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

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

对不起,我输入的输入,输入的呈现方式是我尝试过的,我不知道为什么会这样,请看一下我上传到google drive的图像,非常感谢!!预期输出文件的类型是什么?您好,先生,预期输出文件是.txt格式(文本文件格式)。如果预期输出文件是.xlsx或.csv格式(excel文件格式),也很酷。您已经尝试了什么?您已经
枚举
向后-它返回
索引,值
元组。我自己也没有测试过,但它似乎会产生复制品;我想你想要
enumerate(info[::2])
Hi,cuniculus,我已经运行了你的代码,但似乎遇到了一些其他问题,这里有一个错误:``list\u of tuples=[(name,int(info[index+1])for name,index in enumerate(info)]TypeError:只能将str而不是“int”)连接到str``我仍然无法找出错误..好的,wjandrea,我会试试你的建议,谢谢。顺便问一下,你们怎么把代码/数据放到浅灰色的盒子里?我已经试过了,但我运气不好…@EdisonToh实际上我正在尝试我的建议,但无法让它发挥作用。我很快会补充另一条评论。对于灰色框,请参见Markdown Help页面,因此我更改了
list_of tuples=[(name,int(info[index+1])作为索引,如果不是name.isdigit()],则在enumerate(info)中命名为name.isdigit()]
,但是
list_of_rows
则是
[('number',11)],[('number',11)],[('number',11)],[('number',11)]
@EdisonToh好极了,很乐意帮助!如果您认为我的答案最有用,请勾选左侧的复选框,将其标记为“已接受”,并有效地将您的问题标记为“已回答”。非常感谢您的帮助!!除了勾选左边的复选框外,还有其他方式给你评分吗?答案左边的复选框中是否有“勾号”?如果是这样的话,我已经点击了。@EdisonToh是的,你可以点击左边的向上箭头,向上投票任何你认为有用的答案。是的,您正确地找到了“接受”按钮。