使用函数调整 Pandas Dataframes 索引

Posted

技术标签:

【中文标题】使用函数调整 Pandas Dataframes 索引【英文标题】:Adapting Pandas Dataframes index with a function 【发布时间】:2021-07-08 08:20:03 【问题描述】:

我正在使用不同的数据源并将每个数据存储在不同的数据框中。我想将这些数据帧统一成一个大数据框,但首先我需要统一它们的索引。一些数据帧的索引遵循格式 YYYY-MM-DD,其他使用 YYYYTNN,n=1,2,3,4,最后一种格式是 YYYYMNN,N 从 01 到 12。

它们代表日期,一年中的三个月和一年中的一个月。数学上很容易将它们全部转换为第一种格式,但我正在考虑是否有某种方法可以用 Python 编写,这样我就不必手动更改所有数据索引。索引只是文本片段,所以我不知道如何读取 YYYYTN 并检测 T 的值。

提前谢谢你。

【问题讨论】:

一些数据帧的索引,其他的 ..。全部尝试df.index = pd.to_datetime(df.index) 在格式为 YYYYMNN(每月 1 个值)的情况下,我收到错误代码“ParserError: minute must be in 0..59: 2021M02”。它适用于格式为 YYYYTNN(每年 4 个值)的那些,但它将 4 个值写入一年中的前 4 个月每月一个值,实际上每个值代表 3 个月,所以它应该类似于 1 月 1 日、4 月 1 日、7 月 1 日和 10 月 1 日。你知道我如何在命令中提供这些信息吗? 【参考方案1】:

我终于设法解决了我的问题。如果有人感兴趣,这就是我所做的:

对于那些代表 3 个月的时间段,我使用 datetime 和 timedelta 创建了一个日期列表,从我的数据开始之日到它仅在 1 月、4 月、7 月和 10 月 1 日结束。前 3 个月的数据从 1 月 1 日开始存储,其他数据以相同方式存储。之后,我将列表作为新列添加到数据框中,以便将其定义为索引。这是代码。

def perdelta(start, end, delta):
curr = start
while curr < end:
    yield curr
    curr += delta

这段代码不是我写的,我是从这个页面的另一个问题中得到的,但我找不到了。

Trim20052020=[]
for result in perdelta(date(2005, 1, 1),date(2020,12,1),relativedelta(months=3)):
Trim20052020.append(result)

这会为从 2005 年到 2020 年底的每三个月的一个数据创建日期集。

df['index']=Trim20052020
df.set_index('index',inplace=True)

最后将其定义为索引。

【讨论】:

以上是关于使用函数调整 Pandas Dataframes 索引的主要内容,如果未能解决你的问题,请参考以下文章

使用 List Comprehension (Pandas) 从 DataFrames 列表中删除 DataFrames 列

Pandas Dataframes to_html:突出显示表格行

扁平化(不规则)Python 中关于 Pandas Dataframes 的列表列表

使用多处理时结合 Pandas DataFrames

Python中DataFrames的DataFrame(Pandas)

使用 matplotlib 将 Pandas DataFrames 绘制到饼图中