将.txt文件转换为具有特定列的.csv

2024-04-27 03:19:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些文本文件要加载到python代码中,但txt文件的格式不适合

以下是它包含的内容:

SEQ  MSSSSWLLLSLVAVTAAQSTIEEQAKTFLDKFNHEAEDLFYQSSLASWNY
SS3  CCCHHHHHHHHHHHHCCCCCCHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
     95024445656543114678678999999999999999888889998886
SS8  CCHHHHHHHHHHHHHHCCCCCHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
     96134445555554311253378999999999999999999999999987
SA   EEEbBBBBBBBBBBbEbEEEeeEeBeEbBEEbbEeBeEbbeebBbBbBbb
     41012123422000000103006262214011342311110000030001
TA   bhHHHHHHHHHHHHHgIihiHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
     00789889988663201010099999999999999999898999998741
CD   NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
     54433221111112221122124212411342243234323333333333

我想将其转换为panda Dataframe,将SEQ SS4 SA TA CD SS8作为Dataframe的列,并将其旁边的行作为行。 像这样:enter image description here

我尝试了pd.read_csv,但它没有给我想要的结果

谢谢大家!


Tags: 文件代码txt内容dataframe格式sacd
3条回答

您可以使用此脚本将.txt文件加载到DataFrame并将其另存为csv文件:

import pandas as pd


data = {}
with open('<your file.txt>', 'r') as f_in:
    for line in f_in:
        line = line.split()        
        if len(line) == 2:
            data[line[0]] = [line[1]]

df = pd.DataFrame(data)
print(df)
df.to_csv('data.csv', index=False)

保存此CSV:

enter image description here

要使用pandas.read_csv()方法读取文本文件,文本文件应包含用逗号分隔的数据

 SEQ, SS3, ....
 MSSSSWLLLSLVAVTAAQSTIEEQ..., CCCHHHHHHHHHHHHCCCCCCHHHHHHH.....

台阶

  1. 使用pd.read_fwf()以固定宽度格式读取文件
  2. df.ffill()最后一个可用值填充缺少的值
  3. 使用groupby-cumcount构造为输出中的行号分配组号gp
  4. 将gp=(0,1)按df.pivot移动到列中,然后再次转置到所需的输出中

注意:此解决方案适用于第一列中省略值的任意(包括零,当然不太多)连续行

代码

# data (3 characters for the second column only)
file_path = "/mnt/ramdisk/input.txt"
df = pd.read_fwf(file_path, names=["col", "val"])

# fill the blank values
df["col"].ffill(inplace=True)
# get correct row location
df["gp"] = df.groupby("col").cumcount()
# pivot group (0,1) to columns and then transpose. 
df_ans = df.pivot(index="col", columns="gp", values="val").transpose()

结果

print(df_ans)  # show the first 3 characters only

col   CD   SA  SEQ  SS3  SS8   TA
gp                               
0    NNN  EEE  MSS  CCC  CCH  bhH
1    544  410  NaN  950  961  007

然后可以使用df_ans.to_csv()保存生成的数据帧

相关问题 更多 >