pandas 在Python中将看起来像带有时间戳数据的数组的字符串转换为带有时间戳数据的数组

jk9hmnmh  于 2023-04-19  发布在  Python
关注(0)|答案(1)|浏览(179)

我有一个pandas数据框,其中有一列包含数组。Python像字符串一样解析它。我如何将列更改为列表类型或将此特定单元格更改为数组?
我读到了ast.literal_eval,但不允许使用时间戳类型。我也尝试了json.loads,但出现错误Expecting value: line 1 column 2 (char 1)
示例

df = pd.read_csv('data.csv')

df.head(5)
id     date_time
1      [Timestamp('2023-01-01 13:42:55'), Timestamp('2023-01-01 13:55:19')]
2      [Timestamp('2023-01-01 13:55:23')]
3      [Timestamp('2023-01-01 13:55:33')]
4      [Timestamp('2023-01-01 14:52:33'),Timestamp('2023-01-01 15:01:33')]
5      [Timestamp('2023-01-01 14:52:33'),Timestamp('2023-01-01 15:01:33'), Timestamp('2023-01-01 15:20:33')]

a = df.date_time[1]
print(a)
print(type(a))

[Timestamp('2023-01-01 13:42:55'), Timestamp('2023-01-01 13:55:19')]
'str'

什么是目标-我需要通过这些列表中的列,并检查这些时间戳之间的时间,使时间之间的时间和它是否满足条件,例如,他们之间的1分钟,没有更多。

aurhwmvo

aurhwmvo1#

这里有一个你想要达到的目标的例子

from datetime import datetime
import pandas as pd

df = pd.DataFrame({'id':1, 
                  'date_time': ["Timestamp('2023-01-01 13:42:55'), Timestamp('2023-01-01 13:55:19'), Timestamp('2023-01-01 13:55:23'), Timestamp('2023-01-01 13:55:33')"]})

# Convert the string to a list split by the comma
df['date_time'] = df['date_time'].str.split(',')
# strip the white space and convert to datetime
df['date_time'] = df['date_time'].apply(lambda x: [i.strip() for i in x])
df['date_time'] = df['date_time'].apply(lambda x: [datetime.strptime(i, "Timestamp('%Y-%m-%d %H:%M:%S')") for i in x])
# Calculate the difference between the timestamps
df['date_time'] = df['date_time'].apply(lambda x: [x[i+1] - x[i] for i in range(len(x)-1)])
print(df)

相关问题