python - 如何修改 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)
解决方案
这不是您的列表所采用的格式。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 会让你在不完全了解你使用的数据类型的情况下做很多事情,但是,一般来说,你在尝试以这种方式构建数据之前,应始终考虑您的数据类型及其背后的语法约定。
推荐阅读
- pandas - 如何在熊猫中获取组内“特定”列值的平均值
- javascript - 使用 VueJS 进行表单验证时的 null 值
- python-3.x - 修复了将空列表分配给值“DNA_Sequence”的错误
- java - 类路径资源 [org/quartz/impl/jdbcjobstore/tables_h2.sql] 无法打开,因为它不存在
- chef-infra - 如何覆盖来自另一个配方的通知
- c - 在 8 位 UART 上发送 16 位值
- javascript - 将 Javascript 中的 Ajax 请求处理为 php
- swift - UIViewController 不会取消初始化(mvvm + 协调器)
- angular - instanceof 为子类返回 false
- inkscape - Inkscape:圆形坐标