Как изменить и сохранить столбец в базе данных sqlite3, используя python? - PullRequest
0 голосов
/ 14 декабря 2018

Извините, ребята, это второй пост по этому вопросу, это была моя ошибка, я не прояснил вопрос в предыдущем посте.У меня есть файл CSV (A.csv) имеет много столбцов.Вопрос в том, как изменить и сохранить столбец в этом файле.Я хотел бы заменить значение 1 в столбце y на основе предыдущего значения.

A = [ d   x    y    z
  0   1    2    5
  1   2    1    9
  2   8    1    2
  3   3    40   7
  4   6    1    7
  5   4    30   3
  6   8    40   8
  7   9    1   10
  8   6    1    4
  9  10   10    7]

Ожидаемый ответ должен быть следующим:

A = [ d   x    y    z
  0   1    2    5
  1   2    2    9
  2   8    2    2
  3   3    40   7
  4   6    40   7
  5   4    30   3
  6   8    40   8
  7   9    40   10
  8   6    40   4
  9  10    10   7]

Вот код:

import csv
import numpy as np
import numpy
import pandas as pd

conn = sqlite3.connect('data.db')
conn.text_factory = str 
cur = conn.cursor()
A = cur.execute("SELECT * FROM table1")


with open('output_data1001.csv', 'w') as f: 
  writer = csv.writer(f)
  writer.writerow(['d', 'x','y','z'])
  writer.writerows(A)

Мне очень жаль, что беспокою вас.

1 Ответ

0 голосов
/ 14 декабря 2018

Вот способ сделать это обновление непосредственно в SQLite:

UPDATE yourTable t1
SET y = (SELECT t2.y
         FROM yourTable t2
         WHERE t2.d < t1.d AND t2.y <> 1
         ORDER BY t2.d DESC LIMIT 1)
WHERE y = 1;

На простом английском языке это обновление предназначено для всех строк, где y = 1.Для таких строк он ищет в обратном направлении записи, имеющие меньшие значения d, и находит последнюю запись, где y не равен 1. Затем он обновляется с использованием этого значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...