pandas创建新列并将其添加到sql数据库

时间:2017-06-22 20:56:17

标签: python sql pandas

我正在尝试将我的数据库中的所有时间戳从unixtime转换为格式化的,人类可读的时间。格式化之后,它应该创建一个名为formatted_date的新列,然后将该列写回我连接的SQL数据库。

以下是代码:

import pandas as pd
import numpy as np
import statsmodels.api as sm
from patsy import dmatrices
import sqlite3
import datetime

con = sqlite3.connect('file_name')

df = pd.read_sql_query('SELECT * FROM table', con, chunksize=1000)

def format_date(x):
    format_date = x.unixtime = pd.to_datetime(x.unixtime, unit='s')
    return format_date

for x in df:
    x['formatted_date'] = x.apply(format_date(x)).tosql('bitcoin', con,     if_exists='append')

con.close()

代码正确转换为正确的格式,但在for x in df循环期间发生故障,我尝试创建新列并将其添加到db。我得到的错误是:

  

TypeError :("'系列'对象不可调用",'发生在索引unixtime')

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

由于sqlite似乎支持日期字符串转换,因此您无需将数据提取到熊猫即可将Unix时间转换为时间戳:

Compute the date and time given a unix timestamp 1092941466, and compensate for your local timezone.

SELECT datetime(1092941466, 'unixepoch', 'localtime');

但是,如果仍然需要,您可以将unix时间戳转换为日期字符串,如下所示:

import datetime

unix_ts = 1546732800.0
dt = datetime.datetime.fromtimestamp(unix_ts)
datetime.datetime.strftime(dt, '%Y-%m-%d')

'2019-01-05'