【问题标题】:Read commented column names into pandas将注释的列名读入熊猫
【发布时间】:2015-05-04 11:28:47
【问题描述】:

我想将一些数据加载到 python pandas 中,以便尽可能简单地进行操作。数据采用以下我无法控制的格式:

# file generated on Sun Feb  8 23:42:56 2015
# structure, X2, Rg, filename
1       1.100341        83.720000       run2/crysol//run2_00001 0.840187
2       1.048154        83.730000       run2/crysol//run2_00002 0.788968
3       1.056927        83.730000       run2/crysol//run2_00003 0.793954
4       1.481612        84.040000       run2/crysol//run2_00004 0.786256

我找到了一种使用 read_table 读取数据的方法,但只能通过打开文本文件并使用以下命令单独读取行来提取列名:

In [1]: data = pd.read_table('data.txt', sep='\t', skiprows=2, header=None)
Out[1]:
     0          1      2                        3         4
0    1   1.100341  83.72  run2/crysol//run2_00001  0.840187
1    2   1.048154  83.73  run2/crysol//run2_00002  0.788968
2    3   1.056927  83.73  run2/crysol//run2_00003  0.793954
3    4   1.481612  84.04  run2/crysol//run2_00004  0.786256
In [2]: header = open('data.txt', 'r').readlines()[1].lstrip('#').strip().split(', ')
In [3]: header.append('unknown')
In [4]: data.columns = header
In [5]: print data
    structure         X2     Rg                 filename   unknown
0           1   1.100341  83.72  run2/crysol//run2_00001  0.840187
1           2   1.048154  83.73  run2/crysol//run2_00002  0.788968
2           3   1.056927  83.73  run2/crysol//run2_00003  0.793954
3           4   1.481612  84.04  run2/crysol//run2_00004  0.786256
4           5   1.634436  84.03  run2/crysol//run2_00005  0.935468

它意识到列名是逗号分隔而数据是制表符分隔的事情变得复杂。此外,我不确定为什么其中一个列标签被遗漏在数据标题之外。

有没有办法更简单地使用 pandas 来做到这一点?

【问题讨论】:

    标签: python pandas data-import


    【解决方案1】:

    虽然可能可以告诉parser 如何处理逗号分隔的标头,但这里对您的解决方案进行了轻微的性能改进。只读文件的前两行:

    data = pd.read_table('data.txt', sep='\t', skiprows=2, header=None)
    #read first two lines
    with open('data.txt', 'r') as f:
        _, line2 = f.readline(), f.readline()
    

    由于readline() 只是逐行移动指针,这比读取所有行更有效。

    data.columns = line2.lstrip('#').strip().split(', ')
    

    数据中遗漏了哪个列标签?

    【讨论】:

    • 感谢您,很高兴知道。最后一列缺少列标题。我在问题中将其标记为unknown。我不为我正在做的分析而写那个专栏(实际上我什至不确定它代表什么,但如果我足够好奇,可能会弄清楚)。
    猜你喜欢
    • 2019-06-24
    • 2020-12-23
    • 1970-01-01
    • 2022-07-19
    • 2019-01-12
    • 2021-02-27
    • 2015-04-14
    • 2021-07-28
    相关资源
    最近更新 更多