我有一个带有列标题和数据的文本文件。我正在尝试将此文件数据转换为 pandas DataFrame。
文件:
#Columns: TargetDoc|GRank|LRank|Priority|Loc ID
aaaaa|1|1|Slow|8gkahinka.01
aaaaa|1|0|Slow|7nlafnjbaflnbja.01
我写了下面的代码: 首先,我转换了每一行并尝试列表来转换数据框:
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 columns passed, passed data had 10 columns.
我的代码有什么问题或者有更好的方法转换为数据帧吗?
最佳答案
您可以使用 read_csv
读取文件使用 sep='|'
,然后使用 rename
将第一个列名称修复为后处理步骤:
In [228]:
import io
import pandas as pd
t="""#Columns: TargetDoc|GRank|LRank|Priority|Loc ID
aaaaa|1|1|Slow|8gkahinka.01
aaaaa|1|0|Slow|7nlafnjbaflnbja.01"""
df = pd.read_csv(io.StringIO(t), sep='|')
df
Out[228]:
#Columns: TargetDoc GRank LRank Priority Loc ID
0 aaaaa 1 1 Slow 8gkahinka.01
1 aaaaa 1 0 Slow 7nlafnjbaflnbja.01
现在rename
通过传入第一个列名称作为传入字典的键并分割
新列名称的字符串来创建第一列:
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='|')
然后像上面一样重命名
关于python - 在python中将列表转换为数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41266479/