我正在处理一个文本数据文件,该文件已经能够使用以下格式以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工作簿中为每个关键字创建表格,并将以下相关数据植入其中。 在这方面的任何帮助,我将深表感谢。
谢谢!
答案 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 )
非常方便。