python - 在Python(可能是pandas)中从文件读取数组时,处理和跳过第一行(包含元数据)的优雅方法?

标签 python arrays pandas numpy import

假设我有一个像这样的文件bla.txt:

    21        27       268       288       
55.1   21.2   25.5   23.5   22.3   20.8
28.3   27.1   27.2   26.   25.   23.1 
29.8   28.3   29.0   28.6   27.2   24.4 

第一行包含我稍后想在我的脚本中使用的元数据(下面的脚本中的a, b, c, d),然后剩下的就是一个简单的数组,很容易读。 有没有办法处理第一行,同时在读取数组时跳过它?

换句话说,如何以更优雅/Pythonic 的方式执行以下操作?

import numpy as np

fname = 'bla.txt'

with open(fname) as f:
    lines = f.readlines()
    a, b, c, d = [float(x) for x in lines[0].split()]

myarray = np.loadtxt(fname, skiprows=1)

编辑: 欢迎使用 pandas 解决方案。 [请注意,理想情况下,能够处理和跳过多个元数据行的解决方案将是完美的]

最佳答案

您可以告诉numpy.loadtxt跳过行。

>>> import numpy as np
>>> np.loadtxt('bla.txt', skiprows=1)
array([[55.1, 21.2, 25.5, 23.5, 22.3, 20.8],
       [28.3, 27.1, 27.2, 26. , 25. , 23.1],
       [29.8, 28.3, 29. , 28.6, 27.2, 24.4]])

您可以在没有 numpy 的情况下获取任何文件的第一行

>>> with open('bla.txt') as f:
...     line1 = next(f)
... 
>>> line1
'    21        27       268       288       \n'

如果您的标题行没有缺少值,您也可以使用 loadtxt 读取整个文件,然后将数组切片为数据和标题部分。

您没有标记它,但我建议使用 pandas 以便在您的具体情况下方便。

>>> import pandas as pd
>>> df = pd.read_csv('bla.txt', delim_whitespace=True)
>>> line1 = list(df.columns)
>>> data = df.reset_index().values
>>> 
>>> line1
['21', '27', '268', '288']
>>> data
array([[55.1, 21.2, 25.5, 23.5, 22.3, 20.8],
       [28.3, 27.1, 27.2, 26. , 25. , 23.1],
       [29.8, 28.3, 29. , 28.6, 27.2, 24.4]])

关于python - 在Python(可能是pandas)中从文件读取数组时,处理和跳过第一行(包含元数据)的优雅方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52164047/

相关文章:

python - 百分比格式的 XlsxWriter 错误

带有语句(__enter__ 和 __exit__)的 Python 无法调用函数

python - 与 Python 代码相比,我如何提高 Rust 代码的性能?

arrays - 通过通用函数更新不同的数组

c# - Array.Reverse() 编译成什么?

python - 将数据框中的所有数字除以一个常数

python:递归检查判断字符串是否为回文

python - Ambari 服务器设置 : 'NoneType' object has no attribute 'lower'

list - 如何删除数组中的重复项但保持相同的顺序?

python-2.7 - 处理 Pandas 和 Numpy 中的缺失数据