向列值为json的pandas数据框添加一个键



我有一个像这样的pandas数据框架

import pandas as pd                                                                         
technologies = [                                                                            
("Spark", 22000,'30days',1000.0),                                               
("PySpark",25000,'50days',2300.0),                                              
("Hadoop",23000,'55days',1500.0)                                                
]                                                                               
df = pd.DataFrame(technologies,columns = ['Courses','Fee','Duration','Discount'])           
print(df)

Courses    Fee Duration  Discount
0    Spark  22000   30days    1000.0
1  PySpark  25000   50days    2300.0
2   Hadoop  23000   55days    1500.0

我也有一个json在这样的列之一。

df['json'] = [json.dumps(x) for x in df.to_dict(orient='records')]

打印(df)

Courses    Fee Duration  Discount  json
0    Spark  22000   30days    1000.0  {"Courses": "Spark", "Fee": 22000, "Duration":...
1  PySpark  25000   50days    2300.0  {"Courses": "PySpark", "Fee": 25000, "Duration...
2   Hadoop  23000   55days    1500.0  {"Courses": "Hadoop", "Fee": 23000, "Duration"...

在最后一列json中,我想添加一个新键。像这样

df.apply(lambda row: json.loads(row['json'])['madeby'] = 'Bae Systems',axis=1)
^
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

但我似乎已经没有运气了,所以你有什么想法吗?

这里有一个使用函数的解决方案,这样我们的lambda不会变得太长:

def add_key(data: str) -> dict:
data = json.loads(data)
data["madeby"] = "Bae systems"
return data
df["json"] = df.apply(lambda row: add_key(row["json"]), axis=1)
Courses    Fee Duration  Discount  
0    Spark  22000   30days    1000.0   
1  PySpark  25000   50days    2300.0   
2   Hadoop  23000   55days    1500.0   
                                json  
0    {'Courses': 'Spark', 'Fee': 22000, 'Duration': '30days', 'Discount': 1000.0, 'madeby': 'Bae systems'}  
1  {'Courses': 'PySpark', 'Fee': 25000, 'Duration': '50days', 'Discount': 2300.0, 'madeby': 'Bae systems'}  
2   {'Courses': 'Hadoop', 'Fee': 23000, 'Duration': '55days', 'Discount': 1500.0, 'madeby': 'Bae systems'}  

最新更新