gpt4 book ai didi

python - 将以下日志文​​件(rseqc 输出)读取到 python (3) 中的最佳方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 16:50:11 24 4
gpt4 key购买 nike

我有 100 个以下日志文​​件,我想将它们加载到每个数据集的两个 pandas DataFrame(或 DF 和字典或其他组合)中。

将此文件解析为 python 的最有效方法是什么?

Total Reads                   38948036Total Tags                    49242267Total Assigned Tags           44506208=====================================================================Group               Total_bases         Tag_count           Tags/KbCDS_Exons           34175771            24133928            706.175'UTR_Exons         6341914             1366084             215.413'UTR_Exons         24930397            8269466             331.70Introns             929421174           8172570             8.79TSS_up_1kb          19267668            1044739             54.22TSS_up_5kb          87647060            1433110             16.35TSS_up_10kb         159281339           1549571             9.73TES_down_1kb        19416426            300476              15.48TES_down_5kb        83322244            718139              8.62TES_down_10kb       147880768           1014589             6.86=====================================================================

显然,前三行有参数名称/值,而底部部分有组/总碱基数/标签计数/每 kb 标签数。所有这些都将始终存在,并且在我的所有数据集中都是数字,因此不需要强大的 NA 控制。

目前,我正在将文件解析为嵌套列表(每个数据集一个,即文件),去除空格,并按索引从列表中提取值 - 挑战在于,如果生成的工具文件升级/输出格式略有改变,例如通过添加新标签,我的调试时间将非常令人沮丧。

最佳答案

您可以尝试read_fwfread_csv :

import pandas as pd
import io

temp=u"""Total Reads 38948036
Total Tags 49242267
Total Assigned Tags 44506208
=====================================================================
Group Total_bases Tag_count Tags/Kb
CDS_Exons 34175771 24133928 706.17
5'UTR_Exons 6341914 1366084 215.41
3'UTR_Exons 24930397 8269466 331.70
Introns 929421174 8172570 8.79
TSS_up_1kb 19267668 1044739 54.22
TSS_up_5kb 87647060 1433110 16.35
TSS_up_10kb 159281339 1549571 9.73
TES_down_1kb 19416426 300476 15.48
TES_down_5kb 83322244 718139 8.62
TES_down_10kb 147880768 1014589 6.86
====================================================================="""
#after testing replace io.StringIO(temp) to filename
df1 = pd.read_fwf(io.StringIO(temp),
widths=[30,8], #widths of columns
nrows=3, #read only first 3 rows
index_col=[0], #set first column to index
names=[None, 0]) #set column names to None and 0

print (df1)
0
Total Reads 38948036
Total Tags 49242267
Total Assigned Tags 44506208

print (df1.T)
Total Reads Total Tags Total Assigned Tags
0 38948036 49242267 44506208

#after testing replace io.StringIO(temp) to filename
df2 = pd.read_csv(io.StringIO(temp),
sep="\s+", #separator is arbitrary whitespace
skiprows=4, #skip first 4 rows
comment='=') #skip all rows with first char =

print (df2)
Group Total_bases Tag_count Tags/Kb
0 CDS_Exons 34175771 24133928 706.17
1 5'UTR_Exons 6341914 1366084 215.41
2 3'UTR_Exons 24930397 8269466 331.70
3 Introns 929421174 8172570 8.79
4 TSS_up_1kb 19267668 1044739 54.22
5 TSS_up_5kb 87647060 1433110 16.35
6 TSS_up_10kb 159281339 1549571 9.73
7 TES_down_1kb 19416426 300476 15.48
8 TES_down_5kb 83322244 718139 8.62
9 TES_down_10kb 147880768 1014589 6.86

如果第一列的宽度并不总是[30,8],请使用:

#after testing replace io.StringIO(temp) to filename
df1 = pd.read_csv(io.StringIO(temp),
nrows=3, #skip first 3 rows
sep="\s\s+", #separator is 2 or more arbitrary whitespaces
engine="python", #clean ParserWarning
index_col=0, #set first column to index
header=None, #no header
names=[None, 0]) #set columns names to None (no index name) and 0

print (df1)
0
Total Reads 38948036
Total Tags 49242267
Total Assigned Tags 44506208

print (df1.T)
Total Reads Total Tags Total Assigned Tags
0 38948036 49242267 44506208

关于python - 将以下日志文​​件(rseqc 输出)读取到 python (3) 中的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35907395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com