在python中将列表转换为数据帧

在python中将列表转换为数据帧,python,list,pandas,dataframe,Python,List,Pandas,Dataframe,我有一个带有列标题和数据的文本文件。我正在尝试将此文件数据转换为数据帧 文件: 我写了以下代码: 首先,我转换了每一行并尝试列表转换数据帧: import os import pandas as pd with open("DocID101_201604070523.txt") as raw_file: full_file_text = raw_file.readlines() raw_file.close() data_list = list() for l in full_fi

我有一个带有列标题和数据的文本文件。我正在尝试将此文件数据转换为数据帧

文件:

我写了以下代码: 首先,我转换了每一行并尝试列表转换数据帧:

import os
import pandas as pd

with open("DocID101_201604070523.txt") as raw_file:
    full_file_text = raw_file.readlines()

raw_file.close()

data_list = list()
for l in full_file_text:
    if i.startswith('#'):
        labels = l.strip().replace('#Columns: ','').split('|')
    else:
        data_list += l.strip().split('|')

df = PD.DataFrame.from_records(data_list,columns=labels)
但我在df上出错了:

AssertionError:传递了5列,传递的数据有10列


我的代码有什么问题,或者是否有更好的方法转换为数据帧?

您可以使用with sep='|'读入文件,然后使用rename将第一个列名修复为后处理步骤:

现在,通过传入第一个列名作为传入dict的键来创建第一列,并拆分新列名的字符串:

In [229]:
df.rename(columns={df.columns[0]:df.columns[0].split()[-1]}, inplace=True)
df

Out[229]:
  TargetDoc  GRank  LRank Priority              Loc ID
0     aaaaa      1      1     Slow        8gkahinka.01
1     aaaaa      1      0     Slow  7nlafnjbaflnbja.01
因此,在你的情况下:

df = pd.read_csv("DocID101_201604070523.txt", sep='|')

然后像上面那样重命名,这是因为您将所有行都包含在一个列表中:

data_list += l.strip().split('|')
你想要的是:

data_list.append(l.strip().split('|'))
这样,您将得到一个包含5个元素的列表


编辑:但强烈建议使用上述csv分隔符的解决方案。

在去掉列后,为什么不直接使用pd.read_csv'file.txt',sep='|'。重点是,这是结构化数据,不需要像文本文件一样处理。嗨,实时数据不是结构化的,我正在使用以下内容:你的问题中没有任何内容是实时的,文件可能也有很多垃圾数据,我需要在获得此结构之前清理数据。所以我不能直接使用read_csv,我需要创建另一个临时文件以直接使用read_csv;
data_list += l.strip().split('|')
data_list.append(l.strip().split('|'))