Python:修改dataframe中的json类型列

Python:修改dataframe中的json类型列,python,python-3.x,pandas,Python,Python 3.x,Pandas,我正在使用python3和pandas版本0.25。 我在postgresql表中有一个JSON数据类型。我正在使用pandas.io.sql从表中获取数据 import pandas.io.sql as psql df = psql.read_sql(sql,con,params=params) 所以我从上面的DB调用中获取数据帧 当我检查df的输出(使用IDE)时,我会看到以下数据帧: 现在,当我尝试查看列的数据类型时,我会看到两列的“object”。 我想更新json的列和附加值,使其

我正在使用python3和pandas版本0.25。 我在postgresql表中有一个JSON数据类型。我正在使用pandas.io.sql从表中获取数据

import pandas.io.sql as psql
df = psql.read_sql(sql,con,params=params)
所以我从上面的DB调用中获取数据帧

当我检查df的输出(使用IDE)时,我会看到以下数据帧:

现在,当我尝试查看列的数据类型时,我会看到两列的“object”。

我想更新json的列和附加值,使其成为:

我不能这样做

我试着做了以下几点:

df.loc[:, 'col2_data'] = df.apply(lambda row: row['col2_data'].append({'multiplier':'2'}), axis=1)
但在上述声明之后,它没有给出col2_数据。i、 它不起作用


有人能帮忙吗

由于每个值都是一个列表,我们可以使用字典的
.update
方法添加新值。这可能适用于您的情况:

方法1

df.loc['col2_data'] = df.apply(lambda row: [x.update({'multiplier':'2'}) for x in row['col2_data']], axis=1)
方法2

df.loc['col2_data'] = df.apply(lambda row: [{**x, **{'multiplier':'2'}} for x in row['col2_data']], axis=1)

真奇怪。所以,当我完全按照上面的方法尝试时,它不起作用。在某种意义上,它将col2_数据的值更新为[None](第1行)和[None,None](第2行)。然而,当我在下面尝试(只是尝试创建新列:df.loc['col2_data_new']=df.apply(lambda row:[x.update({'multiplier':'2'})for x in row['col2_data']],axis=1)时,新列col2_data_new与上面的完全相同,即[None](第1行)和[None,None](第2行)。但是,旧列col2_数据现在以某种方式添加了新属性!!再次,我不确定,这是因为.update或.append方法对dtype对象
不起作用。update
方法返回none并就地更新字典。谢谢@YOLO。方法2对我有效。您能在这里解释用法吗,即双星的用法或点很高兴知道,在这里你可以阅读:非常感谢。我有一些相关的问题,我已经问了单独的问题。如果你能帮助,那将是伟大的,谢谢。