使用Python

时间:2019-11-13 19:10:19

标签: python pandas text-files

我正在处理一个文本数据文件,该文件已经能够使用以下格式以CSV / XLSX格式提取数据:

import pandas as pd

token = open('file.txt','r')
linestoken = token.readlines()
resulttoken = []
for x in linestoken:
    resulttoken.append(x.split())
token.close()

df = pd.DataFrame(resulttoken)
df.to_csv('file.csv', index=None, header=None)

print('done!')

但是我的文件具有“关键字”以区分来自不同来源(例如来自不同批次的实验)的数据。数据的结构如下

  

关键字1

     

第1列第2列第3列第4 ....

     

关键字2

     

第1列第2列第3列第4 ....

     

关键字3

     

第1列第2列第3列第4 ....

     

以此类推...

使用我已使用的代码,我只能提取划分为不同列的数据,但是我想在Excel工作簿中为每个关键字创建表格,并将以下相关数据植入其中。 在这方面的任何帮助,我将深表感谢。

谢谢!

2 个答案:

答案 0 :(得分:0)

CSV文件没有工作表,因此无法使用to_csv()执行此操作。试试这个:

df.to_excel('file.xlsx', index=None, header=None, sheet_name=tabname)

根据熊猫文档:

  

可以通过指定唯一的工作表名称来写入多张工作表。   将所有数据写入文件后,有必要保存更改。

答案 1 :(得分:0)

假设每个源(关键字)都可以在文件中的各个位置重复出现,那么第一个任务就是按源对所有数据行进行分组。完成后,我们可以将每个来源的数据写入单独的CSV文件(因为如上所述,CSV文件不能包含工作表)。

此Python 2程序假定您的数据文件适合RAM:

import collections
import csv
import os

tally = collections.defaultdict( list )

with open( 'file.txt', 'r' ) as f:
    lines = f.readlines()
for i in range( 0, len(lines), 2 ):
    # lines[i] is source.  < .rstrip() > removes trailing newline character.
    # lines[i+1] is row of data, as a single string.
    tally[ lines[i].rstrip() ].append( lines[i+1] )

# Output files go into already-existing subdirectory called "subdirectory"
for source, data_rows in tally.items():
    with open( os.path.join( 'subdirectory', '%s.csv' % source ), 'wb' ) as csvfile:
        filewriter = csv.writer( csvfile )        # Can tailor delimiter, etc.
        for data_row in data_rows:
            filewriter.writerow( data_row.split() )

使用csv软件包比使用Pandas轻巧。对于较大的数据集,您可以根据需要打开CSV文件,并在解析输入文件时将其保持打开状态。但是对于涉及到分组内容的快捷脚本,我发现collections.defaultdict( list )非常方便。