2015-10-11 2 views
1

Я работаю с Pandas и SQLAlchemy, чтобы писать цены на финансирование yahoo в библиотеку SQL. Мой вопрос: как удалить метку времени из базы данных?pandas df.to_sql() удалить timestamp

Полный код

def update (symbol): 
    engine = create_engine("sqlite:///test.db") # Access the DB Engine 
    try: 
     if not engine.dialect.has_table(engine, symbol): # If table does not exist. Create 
      start = dt.date(2000, 1, 1) 
      end = dt.datetime.today() 
      get_prices = yahoo.DataReader(symbol, 'yahoo', start, end) 
      get_prices.to_sql(symbol, engine, if_exists='append') 

Этот код работает, он получает цены в базу данных SQL. Но часть даты выглядит так: 2001-01-17 00:00:00.000000.

Как мне изменить свой код, чтобы временная метка не отображалась?

+0

Сообщите свой источник, пожалуйста? – hd1

+0

В какой базе данных вы используете? – van

+1

По умолчанию индекс ('Date') будет иметь тип' datetime64 [ns] '. Чтобы преобразовать его в 'date', вы можете сделать' get_prices.index = get_prices.index.date' перед вызовом 'get_prices.to_sql'. – van

ответ

0

Я имел в виду docs, а также pandas to_sql, и это дало мне представление о том, что сказал Ван.

Ниже приведены коды, которые я интегрировал, кажется, дает мне то, что я хочу.

def update (symbol): 
    engine = create_engine("sqlite:///test.db") # Access the DB Engine 
    try: 
     if not engine.dialect.has_table(engine, symbol): # If table does not exist. Create 
      start = dt.date(2000, 1, 1) 
      end = dt.datetime.today() 
      get_prices = yahoo.DataReader(symbol, 'yahoo', start, end) 
      # The below code was provided by Van, but it changes the name 
      # of the index Column to "index" instead of "date" 
      get_prices.index = get_prices.index.date 
      get_prices.to_sql(symbol, engine, if_exists='append', index=True, 
           index_label='Date') # index_label changes the name back to "Date" 

До сих пор это, кажется, дает мне то, что я намеревался. У кого-нибудь есть лучшее решение?

+1

Я думаю, что это хорошее решение. Установив индекс в новые значения ('' get_prices.index = get_prices.index.date''), имя индекса будет потеряно. Поэтому 'to_sql' использует имя по умолчанию для индекса ('index'), а использование' index_label' - самый простой способ изменить это (другим способом было бы изменить имя самого индекса: 'get_prices.index.name = «Date'') – joris

Смежные вопросы