【问题标题】:How to append pandas dataframe in a for loop while makeing cumulative sum on the first column?如何在 for 循环中附加熊猫数据框,同时在第一列上进行累积和?
【发布时间】:2021-07-11 10:22:50
【问题描述】:

我有几个按特定顺序列出的数据文件,每个文件包含三列(时间、信号 1 和信号 2)。我想从 for 循环中的文件夹中读取所有文件并创建一个 pandas 数据框。 我的问题如下:根据上一次的最后一个元素读取第一个文件后,应该重新计算时间。见下例:

文件 1:

Time Signal1 Signal2
0.8 111 222
1.3 111 222
1.7 111 222

文件 2:

Time Signal1 Signal2
0.2 111 222
1.5 111 222
2.4 111 222

文件 3:

Time Signal1 Signal2
0.8 111 222
1.4 111 222
2.8 111 222

我想要达到的目标

Time Signal1 Signal2
0.8 111 222
1.3 111 222
1.7 111 222
1.9 111 222
3.3 111 222
5.7 111 222
6.5 111 222
7.9 111 222
10.7 111 222

我尝试了什么: 我尝试了 pd.append,但使用此选项不会重新计算我的时间。我也尝试单独计算时间列,然后将其插入回数据框中,但没有成功。

for i in range(len(filenames)):
    files = pd.read_csv(filenames[i], skiprows=(14), sep='\t', names=('Time', 'Signal1', 'Signal2'))

    if i > 0:
        for j in range(len(files.Time)):
            data.Time.append([data.Time.iloc[-1] + files.Time.iloc[j]])

data = files

我的文件长度不同,时间差也不是恒定的。

谁能推荐我如何使用重新计算的时间读取和附加我的​​文件?

谢谢。

【问题讨论】:

  • 欢迎来到 Stackoverflow !!请以适当的方式重新格式化您提到的数据框,以便更容易理解。还贴出您尝试过的代码 sn-p 以及您遇到的问题。
  • 连接数据框后需要设置df.index = np.arange(len(df))+1

标签: python pandas dataframe append


【解决方案1】:

您可以使用 pandas.concat() 连接从 csv 读取的数据帧,然后将增量列表分配给 Time 列。

dfs = []

for i in range(len(filenames)):
    df = pd.read_csv(filenames[i], skiprows=(14), sep='\t', names=('Time', 'Signal1', 'Signal2'))
    dfs.append(df)

df_ = pd.concat(dfs)
df_['Time'] = range(1, len(df_['Time'])+1)

【讨论】:

  • 感谢您的回复。是的,这行得通,但我的问题是我的信号测量之间的时间不是恒定的。不过,在我找到重新计算时间的方法之前,我可以使用您的建议。
  • @Alfonso 你如何重新计算时间?
猜你喜欢
  • 2015-10-18
  • 2023-04-03
  • 2020-01-05
  • 1970-01-01
  • 2017-02-13
  • 2018-04-23
  • 2019-05-11
  • 1970-01-01
相关资源
最近更新 更多