合并csv文件,按时间排序并平均列数

时间:2017-09-27 14:28:55

标签: pandas merge average

我在csv文件中有很多数据集,它们在我附上的图片中看起来像。

在第一列中始终是以分钟为单位的时间,但原始数据文件之间的时间步长和总行数不同。我想有一个输出文件(csv文件),其中所有原始文件被组合并按时间排序。这样时间从列的顶部到底部增加。

raw data and output

当存在多个数字时,应对浓度列求平均值。

我试过这样:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

d1 = pd.read_csv('dat1.txt', sep="\t")
d2 = pd.read_csv('dat2.txt', sep="\t")

d1.columns
d2.columns

merged_outer = pd.merge(d1,d2, on='time', how='outer')
print merged_outer

但它不会导致正确的输出。我是熊猫的初学者,但我希望我能够很好地解释这个问题。感谢您的任何想法或建议!

谢谢你的想法。不幸的是,当我运行它时,我收到一条错误消息,指出dat1.txt不存在。这对我来说很奇怪,因为我最初通过以下方式阅读原始文件:

d1 = pd.read_csv('dat1.txt', sep="\t")
d2 = pd.read_csv('dat2.txt', sep="\t")

抱歉,这里的数据为原始文本:

raw data 1 
time    column2 column3 concentration
1   2   4   3
2   2   4   6
4   2   4   2
7   2   4   5


raw data 2 
time    column2 column3 concentration
1   2   4   6
2   2   4   2
8   2   4   9
10  2   4   5
12  2   4   7

1 个答案:

答案 0 :(得分:1)

这样的事情可能会起作用

filenames = ['dat1.txt', 'dat2.txt',...]
dataframes = {filename: pd.read_csv(filename, sep="\t") for filename in filenames}

merged_outer = pd.concat(dataframes).groupby('time').mean()

当您将字典传递给pd.concat时,它会创建一个MultiIndex DataFrame,其dict键为level0