python - 在python中将列表转换为数据框

标签 python list pandas dataframe

我有一个带有列标题和数据的文本文件。我正在尝试将此文件数据转换为 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/

相关文章:

python - 从 Django 中的通用外键获取值

python-2.7 - 对 pandas 数据帧重新采样并计算实例数

java - 可以在 ArrayList 上设置和调用,抛出 UnsupportedException

java - 将通用列表转换为 java 对象

python - 提取另一列中列出的 pandas 中特定列名的值

python - 在 Pandas 中查找重复行,其中列值的顺序无关紧要

python - Pandas 从具有名称列表的列中获取最常见的名称

python - 使用 RSTP 的 DNN OpenCV Python 总是在几分钟后崩溃

python - 使用 Bottle.py 返回排序后的 JSON

java - 如何使用 android listAdapter 识别滚动方向?