日期/字符串格式/类型导致 sqlite3/pandas 返回格式错误的结果?

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

我希望通过 python 中的 sql 查询数据帧并以 YY-MM 格式返回一些日期,但是无论我如何尝试这样做,我都无法获得正确的格式。

这是现有的脚本。

import pandas as pd
import sqlite3
import os

desktop_path = os.path.expanduser("path")



csv_files = [ 'file1.csv','file2.csv'
]

dataframes =[]

for file in csv_files:
    file_path = os.path.join(desktop_path, file)
    df = pd.read_csv(file_path, header=0)

    dataframes.append(df)


merged_df = pd.concat(dataframes)

#Convert Date string to datetime
merged_df['Date_alternate'] = pd.to_datetime(merged_df['Date'])
print(merged_df['Date']) #prints formatted as MM/DD/YYYY, dtype: object
print("Break")
print(merged_df['Date_alternate']) #prints formatted as YYYY-MM-DD, dtype: datetime64[ns]

db_file= "path"

conn = sqlite3.connect(db_file)
merged_df.to_sql('my_table', conn, index=False)

#column_names = merged_df.columns.tolist()


        
query = "select strftime('%y-%m',my_table.Date), strftime('%Y-%m',my_table.Date_alternate),Date, Date_alternate from my_table limit 500"



query_result = pd.read_sql_query(query,conn)

print(query_result)

query_result.to_csv('path', index=False)#, header=column_names)

conn.close()

我理想地想要的是查询中的前两列中的任意一列仅返回 YY-MM 格式的日期,但这两个

strftime
列都仅返回“无”。 Date 返回格式化的 MM/DD/YYYY,而 Date_alernate 仅返回一个数字。前任: 2021 年 2 月 19 日 | 1613624400 2021 年 2 月 28 日 | 1614488400

不知道发生了什么。真令人沮丧。

python pandas dataframe sqlite
1个回答
0
投票

这里的代码表明,如果您将数据保留为日期/时间对象,您的代码可以正常工作:

import pandas as pd
import sqlite3
import os

data = [
    [ 1, '2020-02-02' ],
    [ 2, '2021-03-03' ],
    [ 3, '2023-04-04' ]
]

merged_df = pd.DataFrame(data, columns=['who','Date'] )

merged_df['Date_alternate'] = pd.to_datetime(merged_df['Date'])

print(merged_df['Date']) #prints formatted as MM/DD/YYYY, dtype: object
print("Break")
print(merged_df['Date_alternate']) #prints formatted as YYYY-MM-DD, dtype: datetime64[ns]

db_file= "path.db"
if os.path.exists(db_file):
    os.remove(db_file)

conn = sqlite3.connect(db_file)
merged_df.to_sql('my_table', conn, index=False)

query = "select strftime('%Y-%m',my_table.Date_alternate) as Other ,Date, Date_alternate from my_table limit 500"

query_result = pd.read_sql_query(query,conn)

print(query_result)

输出:

0    2020-02-02
1    2021-03-03
2    2023-04-04
Name: Date, dtype: object
Break
0   2020-02-02
1   2021-03-03
2   2023-04-04
Name: Date_alternate, dtype: datetime64[ns]
     Other        Date       Date_alternate
0  2020-02  2020-02-02  2020-02-02 00:00:00
1  2021-03  2021-03-03  2021-03-03 00:00:00
2  2023-04  2023-04-04  2023-04-04 00:00:00
© www.soinside.com 2019 - 2024. All rights reserved.