2017-08-01 55 views
0

我有以下列格式合并来自多个txt文件的行数据以列格式的单个数据帧

文件1

Sample 1, 24/07/2017 13:26:08 
0 Peak at 1219 , 1.864 
1 Peak at 1092 , 0.412 
2 Peak at 1358 , 1.661 

文件2

Sample 2, 24/07/2017 14:28:15 
0 Peak at 1219 , 1.544 
1 Peak at 1092 , 0.315 
2 Peak at 1358 , 1.564 
在每个文本文件的行数据

文件3

Sample 3, 24/07/2017 15:31:05 
0 Peak at 1219 , 1.954 
1 Peak at 1092 , 0.524 
2 Peak at 1358 , 1.423 

我想合并来自所有文件的数据,并以这种列格式创建单个数据帧。

Sample No Date  Time  Peak at 1219 Peak at 1092 Peak at 1358 
0  1  24/07/2017 13:26:08 1.864  0.412   1.661 
1  2  24/07/2017 13:28:15 1.544  0.315   1.564 
2  3  24/07/2017 13:31:05 1.954  0.524   1.423 

任何人都可以请帮忙一个代码。非常感谢

回答

1

有主要功能concat,它创建大df。但需要set_index来对齐数据。

然后转置dfT和转换第二级选择get_level_valuesto_datetime

对于第一和第二列使用insertDatetimeIndex.dateDatetimeIndex.time

最后由reset_indexdrop=Truerename_axis列名和最后reset_index再次删除第二个层次:

dfs = [df1,df2,df3] 
#set first column to index 
dfs = [x.set_index(x.columns[0]) for x in dfs] 

df = pd.concat(dfs, 1, keys = range(1, len(dfs) + 1)).T 
print (df) 
         Peak at 1219 Peak at 1092 Peak at 1358 
1 24/07/2017 13:26:08   1.864   0.412   1.661 
2 24/07/2017 14:28:15   1.544   0.315   1.564 
3 24/07/2017 15:31:05   1.954   0.524   1.423 

print (df.index.labels[0]) 
FrozenNDArray([0, 1, 2], dtype='int8') 

dates = pd.to_datetime(df.index.get_level_values(1)) 
df.insert(0, 'Date', dates.date) 
df.insert(1, 'Time', dates.time) 
df = df.reset_index(level=1, drop=True).rename_axis('Sample No').reset_index() 
print (df) 
    Sample No  Date  Time Peak at 1219 Peak at 1092 Peak at 1358 
0   1 2017-07-24 13:26:08   1.864   0.412   1.661 
1   2 2017-07-24 14:28:15   1.544   0.315   1.564 
2   3 2017-07-24 15:31:05   1.954   0.524   1.423 
+0

谢谢你的美好答案@ jezrael.This效果很好,当我有3个文件,在这里我们可以定义set_index为3个文件样本。如果我有n个样本文件会怎么样?我将如何创建dfs的?再次感谢您的帮助。 –

+0

很高兴能帮到你!如果我的回答有帮助,请不要忘记[接受](http://meta.stackexchange.com/a/5235/295067) - 点击答案旁边的复选标记('✓')将其从灰色出来填补。谢谢。 – jezrael

+0

当然我会@jezrael。只需要多个文件的帮助。你能帮忙吗?谢谢 –

相关问题