csv 为什么我不能在python中使用pandas正确地分隔日期-时间列?

gtlvzcf8  于 2023-03-27  发布在  Python
关注(0)|答案(1)|浏览(81)

我从来没有在这里问过一个问题,但我需要帮助。我试图将我的日期列从我的csv文件中分离出来,从'12/10/2022 11:45:12.446 +0200'的形式分离为日期列和时间列。
我已经尝试了我在各种网站上找到的东西,并通过询问ChatGPT,但要么我得到错误,要么它工作,但有'NaT'值填充两列。
这是我目前的代码,它可以工作,但给了我'NaT'值:

import pandas as pd

data = pd.read_csv('file_directory.csv')
print(data['date'].dtype)

data['date'] = pd.to_datetime(data['date'], errors='coerce', utc=True, format='%m/%d/%Y %H:%M:%S.%f %z')
data['date'] = data['date'].dt.date
data['time'] = data['date'].dt.time
data.drop('date', axis=1, inplace=True)`

有谁能帮我解决这个问题,找到问题的原因吗?谢谢!

8cdiaqws

8cdiaqws1#

您的方法应该可以工作(尽管如果您希望列中包含字符串,那么它不是最佳方法)。您必须颠倒两行代码,并避免删除日期:

data = pd.DataFrame({'date': ['12/10/2022 11:45:12.446 +0200']})

data['date'] = pd.to_datetime(data['date'], errors='coerce', utc=True, format='%m/%d/%Y %H:%M:%S.%f %z')

# use this line first else you overwrite "date"
data['time'] = data['date'].dt.time
data['date'] = data['date'].dt.date

输出:

date             time
0  2022-12-10  09:45:12.446000

如果你想要字符串:

data = pd.DataFrame({'date': ['12/10/2022 11:45:12.446 +0200']})

data[['date', 'time']] = data['date'].str.split(r' +', n=1, expand=True)

相关问题