使用函数调整 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 的列表列表