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

2024-06-11 18:57:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的.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,它返回整个文件,weights[0]是文件的第一行。你知道吗

完成时,我的加权平均值如下:

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

也许有一个更整洁的方式与熊猫和numpy?你知道吗

谢谢!你知道吗


Tags: 文件numpytxt列表data参数浮点权重
3条回答

由于没有向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)

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

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

对于tab-separated-有帮助吗?你知道吗


最终:

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

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

相关问题 更多 >