首页 > 解决方案 > 如何修改 SQLite3 中的列?

问题描述

我有一个列表 A 有很多列。问题是如何根据之前的值替换 y 列中的值 1。

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]
 The expected answer should be :  
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]

提前谢谢了...

这是我的代码,我正在尝试修改 y 列并将其保存在同一个 table1 中。

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)

标签: pythonlist

解决方案


这不是您的列表所采用的格式。Python 不会以这种方式读取列表。有几种方法可以做到这一点,但它们都需要以不同的方式考虑您的列表,或者将其格式化为列表以外的其他内容。如果要将其保留为列表,可以将其设为列表列表:

A = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
    [1, 2, 8, 3, 6, 4, 8, 9, 6, 10], 
    [2, 1, 1, 40, 1, 30, 40, 1, 1, 10], 
    [5, 9, 2, 7, 7, 3, 8, 10, 4, 7]]

现在,您可以通过索引引用子列表,并进行任何您想要的更改:

for i in range(len(A[2])):
    if A[2][i]==1:
        A[2][i]=A[2][i-1]

print(A[2])
>>>[2, 2, 2, 40, 40, 30, 40, 40, 40, 10]

您也可以将列表称为数组,而不是列表:

import numpy
A = numpy.array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
                [1, 2, 8, 3, 6, 4, 8, 9, 6, 10], 
                [2, 1, 1, 40, 1, 30, 40, 1, 1, 10], 
                [5, 9, 2, 7, 7, 3, 8, 10, 4, 7]])

for i in range(0,len(A[2])):
    if A[2, i]==1:
        A[2, i]=A[2, i-1]

print(A[2])
>>>[2, 2, 2, 40, 40, 30, 40, 40, 40, 10]

或者它可能是一本字典:

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

for i in range(len(A["y"])):
    if A["y"][i]==1:
        A["y"][i]=A["y"][i-1]

print(A["y"])
>>>[2, 2, 2, 40, 40, 30, 40, 40, 40, 10]

Python 在数据结构方面比其他语言稍微松散一些,所以一开始很容易被它们绊倒,因为 Python 会让你在不完全了解你使用的数据类型的情况下做很多事情,但是,一般来说,你在尝试以这种方式构建数据之前,应始终考虑您的数据类型及其背后的语法约定。


推荐阅读