我希望通过 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
不知道发生了什么。真令人沮丧。
这里的代码表明,如果您将数据保留为日期/时间对象,您的代码可以正常工作:
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