Python\u如何为numpy读取的每个文件在新列中写入数据?
我有几个这样结构的文本文件。列数相同但行数不同:Python\u如何为numpy读取的每个文件在新列中写入数据?,python,csv,numpy,multiple-columns,Python,Csv,Numpy,Multiple Columns,我有几个这样结构的文本文件。列数相同但行数不同: 1.txt 2013-08-29T15:11:18.55912 0.019494552 0.110042184 0.164076427 0.587849877 2013-08-29T15:11:18.65912 0.036270974 0.097213155 0.122628797 0.556928624 2013-08-29T15:11:18.75912 0.055350041 0.104121094 0.121641949 0.5
1.txt
2013-08-29T15:11:18.55912 0.019494552 0.110042184 0.164076427 0.587849877
2013-08-29T15:11:18.65912 0.036270974 0.097213155 0.122628797 0.556928624
2013-08-29T15:11:18.75912 0.055350041 0.104121094 0.121641949 0.593113069
2013-08-29T15:11:18.85912 0.057159263 0.107410588 0.198122695 0.591797271
2013-08-29T15:11:18.95912 0.05288292 0.102476346 0.172958062 0.591139372
2013-08-29T15:11:19.05912 0.043507861 0.104121094 0.162102731 0.598376261
2013-08-29T15:11:19.15912 0.068343545 0.102805296 0.168517245 0.587849877
2013-08-29T15:11:19.25912 0.054527668 0.105765841 0.184306818 0.587191978
2013-08-29T15:11:19.35912 0.055678991 0.107739538 0.169997517 0.539165352
2013-08-29T15:11:19.45912 0.05321187 0.102476346 0.167530397 0.645744989
2.txt
2013-08-29T16:46:05.41730 0.048771052 0.10642374 0.180852849 0.430612023
2013-08-29T16:46:05.51730 0.046303932 0.112673779 0.166050124 0.518112585
2013-08-29T16:46:05.61730 0.059955334 0.149845068 0.164569851 0.511533595
2013-08-29T16:46:05.71730 0.042192064 0.107410588 0.115227435 0.476007051
2013-08-29T16:46:05.81730 0.037915721 0.115634324 0.177892304 0.519428383
2013-08-29T16:46:05.91730 0.043507861 0.120568566 0.187267364 0.483243939
2013-08-29T16:46:06.01730 0.042356538 0.10642374 0.143352612 0.522059978
这段代码读取文件夹中的所有文本文件,进行一些计算,并将每个文本文件的结果写入单个csv中的新列中
files_ = glob.glob('D:\Test files\New folder\*.txt')
averages_ = []
seg_len = 3
def cum_sum(lis):
total = 0
for x in lis:
total += x[1]
yield total
with open ('outfile.csv', 'wb') as outfile:
writer = csv.writer(outfile)
for i in files_:
acols, f_column, average_original, fcol = [], [], [], []
data = loadtxt(i , usecols = (1,2,3,4))
for x in range(0, len(data[:,0]), seg_len):
#some math on each column
sample_means = [x] + [mean(data[x:x+seg_len,i]) for i in range(4)]
#change types and save in a list
float_means = ["%1f" % (x) for x in sample_means]
#append previous two lines in lists
average_original.append(sample_means)
acols.append(float_means)
fcol = list(cum_sum(average_original))
#write fcol in a column next to acols
acols = [row + [col] for row, col in zip(acols, fcol)]
averages_.append(acols)
for row in averages_:
writer.writerows(row)
Q:
但我无法获得为每个新文件编写新列的代码。我找到的最相关的帖子是,但是line.strip()
对我不起作用。
我很感激您能给我一些提示,告诉我如何处理这个问题。这对您有用吗
import pandas as pd
df = pd.DataFrame()
mad = lambda x: x[0] + x.mean()
A = []
for f in ['1.txt', '2.txt']:
tmp = pd.read_csv(f, header=None, delim_whitespace=True)
tmp = tmp.ix[:,1:5]
df = pd.concat([df, pd.rolling_apply(tmp, 3, mad)], axis=1)
df.to_csv('test.csv')
在这种情况下,rolling\u apply
功能将沿列应用移动功能,窗口为3
如果这不是你想要的,我很抱歉,但我认为这表明熊猫是多么强大。你看过图书馆吗?@MrE,谢谢你提到熊猫。看起来真的很有用,但我这里的问题是没有单独的列表,所以我把它们放在一起。该列表是通过附加多个文件中的行来创建的。我认为使用熊猫我必须从头开始重做一切,使用IO工具,对吗?谢谢你的回答。但首先,正如我在我的Q上所评论的,代码迭代一个文件夹中的所有文件,并将它们逐行写入一个列表中。
rolling\u apply
在这里也没有帮助,因为它一行一行地滑过一列,而我需要n行的段。据我所知,这实际上是在做你想要的事情,使用n=3
@MrE的段/窗口,你是对的,我错了。rolling\u apply
做它应该做的,但不是我需要的。我只是没有把这部分代码包含在这里,因为这不是我的问题。我还是更新了代码。