我试图将Pandas DataFrame中的数据插入到现有的Django模型中Agency,该模型使用SQLite后端.但是,按照如何将一个Pandas Dataframe写入Django模型并将Pandas DataFrame保存到Django模型的答案导致整个SQLite表被替换并打破Django代码.具体来说,Django自动生成的id主键列被替换为index导致模板(no such column: agency.id)时出错.
这是在SQLite表上使用Pandas to_sql的代码和结果agency.
在models.py:
class Agency(models.Model):
name = models.CharField(max_length=128)
Run Code Online (Sandbox Code Playgroud)
在myapp/management/commands/populate.py:
class Command(BaseCommand):
def handle(self, *args, **options):
# Open ModelConnection
from django.conf import settings
database_name = settings.DATABASES['default']['NAME']
database_url = 'sqlite:///{}'.format(database_name)
engine = create_engine(database_url, echo=False)
# Insert data data
agencies = pd.DataFrame({"name": ["Agency 1", "Agency 2", "Agency 3"]})
agencies.to_sql("agency", con=engine, if_exists="replace")
Run Code Online (Sandbox Code Playgroud)
呼叫' python manage.py populate'成功地将三个机构添加到表中:
index …Run Code Online (Sandbox Code Playgroud) 我正在挑战自己只使用 SL 算法、迭代器等编写回文测试器。我还想编写程序以使用原始字符串。下面,我pal在copy_if算法中使用了原始指针,但相反,我如何定义一个迭代器来这里,即使用类似begin(pal)and 的东西end(pal + size)?
#include <algorithm>
#include <iterator>
#include <cctype>
using namespace std;
bool isPalindrome(const char* pal) {
if (!pal) { return(false); }
int size = strlen(pal);
string pal_raw;
pal_raw.reserve(size);
// Copy alphabetical chars only (no spaces, punctuations etc.) into pal_raw
copy_if(pal, pal+size, back_inserter(pal_raw),
[](char item) {return isalpha(item); }
);
// Test if palindromic, ignoring capitalisation
bool same = equal(begin(pal_raw), end(pal_raw), rbegin(pal_raw), rend(pal_raw),
[](char item1, char item2) {return tolower(item1) == …Run Code Online (Sandbox Code Playgroud) 我正在尝试在距其他坐标最近的点处拆分 Shapely LineString。我可以使用 获得线上最近的点project,interpolate但此时我无法分割线,因为它不是顶点。
我需要沿着边缘分割线,而不是捕捉到最近的顶点,以便最近的点成为线上的新顶点。
这是我到目前为止所做的:
from shapely.ops import split
from shapely.geometry import Point, LineString
line = LineString([(0, 0), (5,8)])
point = Point(2,3)
# Find coordinate of closest point on line to point
d = line.project(point)
p = line.interpolate(d)
print(p)
# >>> POINT (1.910112359550562 3.056179775280899)
# Split the line at the point
result = split(line, p)
print(result)
# >>> GEOMETRYCOLLECTION (LINESTRING (0 0, 5 8))
Run Code Online (Sandbox Code Playgroud)
谢谢!