如何在循环中附加多个熊猫数据框?
Posted
技术标签:
【中文标题】如何在循环中附加多个熊猫数据框?【英文标题】:How to append multiple pandas DataFrames in a loop? 【发布时间】:2018-04-23 06:32:57 【问题描述】:一段时间以来,我一直在努力解决这个 python 问题,但被卡住了。我正在循环遍历几个 csv 文件,并且想要一个数据框来附加 csv 文件,使得每个 csv 文件中的一列是列名并设置 date_time 的公共索引。
除了 value
和 pod
的编号不同之外,有 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
,但没有对它做任何事情。
我会清理描述。
【参考方案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 谢谢!以上是关于如何在循环中附加多个熊猫数据框?的主要内容,如果未能解决你的问题,请参考以下文章