gpt4 book ai didi

Python - NumPy.Where 与字典

转载 作者:行者123 更新时间:2023-11-28 21:34:42 25 4
gpt4 key购买 nike

我可能做错了,或者可能有比这更好的方法,因为我还是 Python 新手。对于任何明显的错误,请提前道歉。

我有一个 Pandas 数据框,其中包含一个包含日期和时间的 STR 列。它是 STR,因为时间是“广播”格式的,这意味着一天有 29 个小时。所以我们会看到像 01/Jan/2018 29:59:59 这样的日期。距其 1 秒及其 02/Jan/2018 06:00:00。

我的目标是将这些数据转换为实时数据。这意味着 24 到 29 之间的任何时间也需要日期转换。我已经将 STR 拆分为 2 个新列 ['Dt'] 和 ['Ti'],来自 ['Ti'],将 Hour 提取到一个新列作为 ['Hr'] 并将其设为 INT。

然后我将 pd.to_datetime 应用于 ['Dt'] 并添加了一条规则。

df['Dt'] = np.where(df['Hr'] > 23, df['Dt']+pd.DateOffset(1),df['Dt']+pd.DateOffset(0) )

这很完美。

我现在需要将小时更改为实时,例如,24 = 00、25 = 02 等。

我认为最好的方法是使用 DICT 并对其进行映射,所以我制作了一个 DICT,

HourMap = {'24':'00','25':'01','26':'02','27':'03','28':'04','29':'05','30':'06'}  

然后写了这个

df['Hr1'] = np.where(df['Hr'] > 23, df.replace({'Hr':HourMap}),df['Hr'])

但我得到一个“ValueError”

ValueError: operands could not be broadcast together with shapes (273,) (273,29) (273,)

我查看了数据框中的那些行,它们只是普通的 INT。在测试中,我可以对它们应用数学(例如 df['Test'] = df['Hr'] + 1。

我确实将它们转换为 STR 并尝试了相同的规则,但得到了相同的错误。

我是不是疯了?

谢谢,

最佳答案

我认为需要改变:

df.replace({'Hr':HourMap})

map如果某些值不匹配并返回 NaN,则通过 fillna 将其替换为原始值:

df['Hr'].map(HourMap).fillna(df['Hr'])
#alternative solution if performance is not important in large df
#df['Hr'].replace(HourMap)

因为 df.replace 返回 DataFrame 的所有列替换为 Hr

关于Python - NumPy.Where 与字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53044621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com