将分隔的文件列作为列表读取,而不是返回行

Reading delimited file columns as lists, returning rows instead

我有一个很大的 .txt 文件,我想以列表的形式阅读每一列。该文件有 9 列分隔的浮点数,第一行(几千行)是:

0.49406565E-323  0.29532530E+003  0.89244837E+001  0.20901651E-002  0.34989878E+001  0.11594090E+000  0.34025716E-001  0.33723126E+001  0.27954433E+000  0.80757378E-001  0.50813056E+001

我正在这样阅读我的文件:

colnames = ['weight', 'likelihood', 'A_0', 'w_0', 'p_0', 'A_1', 'w_1', 'p_1', 'A_2', 'w_2', 'p_2']
data = pandas.read_csv('data.txt', names=colnames)

weights = data.weight.tolist()
A_0     = data.A_0.tolist()

第一列是权重,其余是参数,我想对所有参数的权重进行加权平均计算。

但是如果我打印 weights,例如,它 returns 整个文件,weights[0] 是文件的第一行。

为了完成,我的加权平均值应该是这样的:

weighted_A_0 = numpy.average(A_0, weights=weights)

也许 pandas 和 numpy 有更好的方法?

谢谢!

默认情况下 pd.read_csv 查找逗号分隔,但您可以使用 sep 参数指定分隔符,例如:

df = pd.read_csv('data.txt', names=colnames, sep='\t')

制表符分隔 - 有帮助吗?


决赛:

原来它是 ' ' 分隔的,所以我们让它与

一起使用
df = pd.read_csv('data.txt', names=colnames, sep='\s+')

由于您没有将任何分隔符传递给 read_csv 函数,它使用逗号作为默认分隔符。您的文件 data.txt 不包含任何逗号,因此它将整个数据放入第一列(权重)。

data = pandas.read_csv('data.txt', names=colnames, delim_whitespace=True)

delim_whitespace : boolean, default False

Specifies whether or not whitespace (e.g. ' ' or ' ') will be used as the sep.

Equivalent to setting sep='\s+'. If this option is set to True, nothing should be passed in for the delimiter parameter.

with open(r'C:/input_data.txt') as f:
   lines = f.read().splitlines()
   lines = [line.split() for line in lines]
   #print lines
labels = [column labels]
df = pd.DataFrame.from_records(lines , columns=labels)