Python: pd.to_datetime 删除所有日期。

问题描述 投票:0回答:1

我目前正在从数据库中下载一个CSV(使用PgAdmin),并使用Python脚本来重新格式化和过滤行以导入其他地方。然而,我遇到了一个非常奇怪的错误。

如果我试着用从数据库下载的CSV来运行脚本,它将其中一列的所有日期都转换为空白(NaN)。然而,如果我事先在Excel中打开同一个文档,并 "另存为 "到另一个CSV文件中,我的脚本将所有的日期正确地转换为所需的格式(dd/mm/yyyy).

这是一个最小的复制案例。

import pandas as pd

file_path = r'C:\Users\MiguelTavares\Desktop\from_database.csv'
data = pd.read_csv(file_path)
data['start_date'] = pd.to_datetime(data['start_date'], errors='coerce', format='%d/%m/%Y')

print(data)

CSV看起来是这样的

column1    column2    start_date
test1      test2      26/06/2019
test11     test22     25/07/2019

我相信这一切的发生都是因为我通过了... ... errors='coerce'. 但是我需要传递这个信息,因为如果我不传递这个信息,我就会得到一个ValueError,我需要把这个信息放到datetime中,这样我以后就可以用它进行计算。

ValueError: time data '2019-06-26' does not match format '%d/%m/%Y' (match)

CSV文件的格式(.csv)和编码(UTF-8)在数据库的文件和我 "保存为 "的文件中是一样的,内容也是一样的。那么,为什么我的脚本在我 "另存为 "的重复文件中工作得很完美,而在数据库中的文件中却不完美?

先谢谢你

python pandas csv datetime pgadmin
1个回答
0
投票

只要这样做应该就可以了,如果这样做不行,那么start_date列中有一些不同格式的值。

df = pd.read_csv('test.csv', sep='\s+')
df['start_date'] = pd.to_datetime(df['start_date'])
print(df)

  column1 column2 start_date
0   test1   test2 2019-06-26
1  test11  test22 2019-07-25

0
投票
import pandas as pd

file_path = r'C:\Users\MiguelTavares\Desktop\from_database.csv'

# parse dates while reading csv. dayfirst=True parsing it from format DD/MM
data = pd.read_csv(file_path, parse_dates=['start_date'], dayfirst=True)

print(data)

这个应该能用

© www.soinside.com 2019 - 2024. All rights reserved.