在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('|'))