【问题标题】:Adapting Pandas Dataframes index with a function使用函数调整 Pandas Dataframes 索引
【发布时间】: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 日。你知道我如何在命令中提供这些信息吗?

标签: python pandas dataframe indexing


【解决方案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)

最后将其定义为索引。

【讨论】:

    猜你喜欢
    • 2015-06-02
    • 2021-10-10
    • 1970-01-01
    • 2018-11-14
    • 2012-10-02
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多