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

时间:2017-07-25 09:05:31

标签: python list pandas csv weighted-average

我有一个很大的.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更整洁的方式?

谢谢!

3 个答案:

答案 0 :(得分:3)

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

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

delim_whitespace:布尔值,默认为False

     

指定是否   空格(例如''或'')将用作sep。

     

相当于设置sep =' \ s +' 。如果此选项设置为True,则不应该是任何内容   传入了delimiter参数。

答案 1 :(得分:1)

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

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

分隔标签 - 会有帮助吗?

最后:

结果是' '分隔,因此我们将其与

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

答案 2 :(得分:0)

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)