【问题标题】:How to append multiple pandas DataFrames in a loop?如何在循环中附加多个熊猫数据框?
【发布时间】:2018-04-23 06:32:57
【问题描述】:

一段时间以来,我一直在努力解决这个 python 问题,但被卡住了。我正在循环遍历几个 csv 文件,并且想要一个数据框来附加 csv 文件,使得每个 csv 文件中的一列是列名并设置 date_time 的公共索引。

除了 valuepod 的编号不同之外,有 11 个 csv 文件看起来像这个数据框,但所有 csv 的 time_stamp 都是相同的。

data

    pod time_stamp  value
0   97  2016-02-22  3.048000
1   97  2016-02-29  23.622001
2   97  2016-03-07  13.970001
3   97  2016-03-14  6.604000
4   97  2016-03-21  NaN

这是我目前拥有的 for 循环:

import glob
import pandas as pd

filenames = sorted(glob.glob('*.csv'))

new = []

for f in filenames:
    data = pd.read_csv(f)

    time_stamp = [pd.to_datetime(d) for d in time_stamp]

    new.append(data)

my_df = pd.DataFrame(new, columns=['pod','time_stamp','value'])

我想要的是一个看起来像这样的数据框,其中每一列都是来自每个 csv 文件的value 的结果。

time_stamp  97        98       99 ...
2016-02-22  3.04800   4.20002  3.5500
2016-02-29. 23.62201  24.7392  21.1110
2016-03-07 13.97001   11.0284  12.0000

但是现在my_df 的输出非常错误,看起来像这样。关于我哪里出错的任何想法?

    0
0   pod time_stamp value 0 22 2016-...
1   pod time_stamp value 0 72 2016-...
2   pod time_stamp value 0 79 2016-0...
3   pod time_stamp value 0 86 2016-...
4   pod time_stamp value 0 87 2016-...
5   pod time_stamp value 0 88 2016-...
6   pod time_stamp value 0 90 2016-0...
7   pod time_stamp value 0 93 2016-0...
8   pod time_stamp value 0 95 2016-...

【问题讨论】:

  • 您转换了time_stamp,但没有将其分配回去。此外,您创建了一个新变量 rain,但没有对它做任何事情。
  • 我会清理描述。

标签: python pandas csv dataframe append


【解决方案1】:

我建议首先将所有数据帧与pd.concat 连接在一起,然后进行最后一次pivot 操作。

filenames = sorted(glob.glob('*.csv'))

new = [pd.read_csv(f, parse_dates=['time_stamp']) for f in filenames]
df = pd.concat(new) # omit axis argument since it is 0 by default

df = df.pivot(index='time_stamp', columns='pod')

请注意,我在加载数据帧时强制read_csv解析time_stamp,因此不再需要在加载后解析。


MCVE

df

   pod  time_stamp      value
0   97  2016-02-22   3.048000
1   97  2016-02-29  23.622001
2   97  2016-03-07  13.970001
3   97  2016-03-14   6.604000
4   97  2016-03-21        NaN

df.pivot(index='time_stamp', columns='pod')

                value
pod                97
time_stamp           
2016-02-22   3.048000
2016-02-29  23.622001
2016-03-07  13.970001
2016-03-14   6.604000
2016-03-21        NaN

【讨论】:

  • 这真的很干净。优秀。非常感谢。
  • @JAG2024 谢谢,应该是axis=0。错字。
  • 我喜欢。 . .
  • @piRSquared 谢谢!
猜你喜欢
  • 2015-10-18
  • 2017-10-12
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
  • 2017-10-29
  • 1970-01-01
相关资源
最近更新 更多