gpt4 book ai didi

python - Pandas:从 3 列创建时间戳:月、日、小时

转载 作者:行者123 更新时间:2023-11-28 19:30:53 25 4
gpt4 key购买 nike

我使用的是 Python 2.7、panda 0.14.1-2、numpy 1.8.1-1。我必须使用 Python 2.7,因为我将它与一些在 Python 3 上不起作用的东西结合在一起

我正在尝试分析一个 csv 文件,该文件在单独的列中输出月、日和小时,并且看起来类似于以下内容:

月日小时值
1 1 1 105
1 1 2 30
1 1 3 85
1 1 4 52
1 1 5 65

我基本上想从这些列创建一个时间戳,并使用“2005”作为年份,并将这个新的时间戳列设置为索引。我读过很多类似的问题(herehere),但它们都依赖于在 read_csv() 期间做的事情。我没有年份专栏,所以我认为这不适用于我(除了加载数据框、插入列、写入和重做 read_csv 之外……看起来很复杂)。

加载数据框后,我在位置 0 插入一个年份列df.insert(0, "年份", 2005)

现在我有

年月日小时值
2005 年 1 1 1 105
2005 年 1 1 2 30
2005 年 1 1 3 85
2005 年 1 1 4 52
2005 年 1 1 5 65
df.types 告诉我所有列都是 int64 类型。

然后我尝试这样做:

df['Datetime'] = pd.to_datetime(df.Year*1000000 + df.Month*10000 + df.Day+100 + df.Hour, format="%Y%M%d%H ")

但我收到“TypeError: 'long' object is unsliceable”

另一方面,以下运行没有错误。

df['Datetime'] = pd.to_datetime(df.Year*10000 + df.Month*100 + df.Day, format="%Y%M%d")

由于 2.7 不喜欢 %Y%M%d%H,正如@EdChum 所指出的,我尝试分两步进行:创建没有小时的日期时间,并在之后添加小时。但是:输出不是我想要的

In [1]: # Do it without hours first (otherwise doesn't work in Python 2.7)
df['Datetime'] = pd.to_datetime(df.Year*10000 + df.Month*100 + df.Day, format="%Y%M%d")

In [2]: df['Datetime']
Out [2]:
0 2005-01-01 00:01:00
1 2005-01-01 00:01:00
...
13 2005-01-01 00:01:00
14 2005-01-01 00:01:00
...
8745 2005-01-31 00:12:00
8746 2005-01-31 00:12:00
...
8758 2005-01-31 00:12:00
8759 2005-01-31 00:12:00

例如 8758 应该是 2005-12-31。 这有什么问题?

一旦我解决了这个问题,我就可以重新添加时间:

In [3]: # Then add the hours
df['Datetime'] = df['Datetime'] + pd.to_timedelta(df['Hour'], unit="h")

最佳答案

让 pandas 解析器完成繁重的工作(如第一个答案)显然是最好的选择,如果你是从 csv 中获取它的话。如果您以不同的方式获取或计算数字,请尝试:

df['DateTime'] = df[['Year', 'Month', 'Day', 'Hour']].apply(lambda s : datetime.datetime(*s),axis = 1)

发现它仍然易于阅读且非常灵活。

关于python - Pandas:从 3 列创建时间戳:月、日、小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26137946/

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