首页 > 解决方案 > 如何为数据框创建循环?

问题描述

我正在处理 521 个具有基因名称和表达值的文本文件。由于基因名称很常见,因此只有表达值不同。我尝试使用相同的数据框,但我无法做到。我可以使用哪些方法?

我尝试过使用熊猫和数据框。如何创建一个循环,以便在匹配基因名称后仅附加表达式值?

import os
import pandas as pd
os.chdir('F:\study\TCGA\COAD\pcfiles\info')
f1=open('file1.txt').read().split('\n')
f2=open('file2FPKM.txt').read().split('\n')
df=pd.DataFrame(f1,f2)
print(df)

输出应如下所示:

Gene name     p1  ....................pn
gene1          x                      xn
gene2          x                      xn
gene3          x                      xn
.
.
.
.
.
gene19250      n                      xn

p是病人的名字。

x代表数字。

我希望所有这些都写在一个文本文件中。

标签: pythonpython-3.xpandas

解决方案


这可以通过以下方式实现:

import glob
import os
import pandas as pd

path = 'C:\\tmmp' #Directory where all .txt files stored
mastertext = open("master.txt", "a+") #Open master.txt in append mode and create one if doesn't exist in current directory
mastertext.write("header1    header2\n") #Insert the header first, assume 4 spaces between headers
for filename in glob.glob(os.path.join(path, '*.txt')):
    f1=open(filename).readlines() #Open the file and read content into a list line by line
    mastertext.write(f1[1] + "\n") #Write 2nd line into master.txt (f1[1]
mastertext.close() #Close master.txt

例如,我有 4 个文本文件(假设每个行元素之间有 4 个空格),如下所示:

1st.txt:

header1     header2
1stdata1    1stdata2

第二个.txt:

header1     header2
2nddata1    2nddata2

第三个.txt:

header1     header2
3rddata1    3rddata2

4th.txt:

header1     header2
4thdata1    4thdata2

当我运行上面的代码时,它会生成master.txt:

header1     header2
1stdata1    1stdata2
2nddata1    2nddata2
3rddata1    3rddata2
4thdata1    4thdata2

这可能不是最好的解决方案。通常,如果您的文件采用.csv格式,处理起来会容易得多,因为 pandas 有一个方法,该方法read_csv具有一个属性skiprows,您可以在其中设置要跳过的行,例如skiprows=0跳过标题的示例。而且,由于这是一个.txt文件,您可能会在一行中的条目之间的间距方面遇到一些困难。在上面的示例中,我假设间距为4 space. 祝你今天过得愉快。


推荐阅读