我想在 where()条件中发送df[['rank','url']] =pd.concat(df['ranks'].apply(literal_eval).apply(pd.io.json.json_normalize).tolist()).values
# df[['rank','url']] =pd.concat(df['ranks'].apply(pd.io.json.json_normalize).tolist()).values # If you have lists with dict
Keyword ranks search_type search_volume rank url
0 kw1 [{'rank': 1, 'url': "example.com"}] 1 500 1 example.com
1 kw1 [{'rank': 1, 'url': "example.com"}] 2 500 1 example.com
2 kw2 [{'rank': 2, 'url': "example.com"}] 1 1500 2 example.com
3 kw2 [{'rank': 2, 'url': "example.com"}] 2 1500 2 example.com
4 kw3 [{'rank': 1, 'url': "example.com"}] 1 60 1 example.com
5 kw3 [{'rank': 1, 'url': "example.com"}] 2 60 1 example.com
到date1
功能的内容并返回结果。
注意:其实我想比较两个日期,我需要更改其中一个日期才能爆炸
这是我的代码:
exp
还有其他方法吗?
答案 0 :(得分:2)
exp
是一个PHP函数,在andWhere
中准备一个将在SQL服务器上运行的SQL查询。 SQL服务器上的SQL解析器无法执行PHP函数。你应该在这里使用MySQL DATE_FORMAT函数:
$promise = new ActiveDataProvider([
'query' => Post::find()
->where('status = "show"')
->andWhere(['<=', 'DATE_FORMAT(date1, "%Y")', 'date2'])
->orderBy('id'),
]);
请更改字段date1
和date2
的名称,以使其更具信息性。对于前者order_date
,delivery_date
等。
如果代码中经常使用status
值,则应使用Post
类的常量替换它们。
如果date2
仅包含年份值,则最好使用YEAR类型。