我目前正在从数据库中下载一个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)在数据库的文件和我 "保存为 "的文件中是一样的,内容也是一样的。那么,为什么我的脚本在我 "另存为 "的重复文件中工作得很完美,而在数据库中的文件中却不完美?
先谢谢你
只要这样做应该就可以了,如果这样做不行,那么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
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)
这个应该能用