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