Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将json.loads应用于df中的每一行_Python_Json_Pandas - Fatal编程技术网

Python 如何将json.loads应用于df中的每一行

Python 如何将json.loads应用于df中的每一行,python,json,pandas,Python,Json,Pandas,我有一个列元数据。此列包含嵌套字典。我想去掉每行值周围的单引号json.loads(data)只传递了一个值,工作正常 示例如下: data = '{"dek": "<p>Don\'t forget to buy a card</p>", "links": {"edit": {"dev": "...}}}' data_json = json.loads(data) data TypeError:JSON对象必须是str、bytes或bytearray,而不是Series

我有一个列
元数据
。此列包含嵌套字典。我想去掉每行值周围的单引号
json.loads(data)
只传递了一个值,工作正常

示例如下:

data = '{"dek": "<p>Don\'t forget to buy a card</p>", "links": {"edit": {"dev": "...}}}'
data_json = json.loads(data)
data
TypeError:JSON对象必须是str、bytes或bytearray,而不是Series

数据集示例:

id    metadata                                         title 
123  {"dek": "<p>Student loan debt is crippling a g... channel
124  {"dek": "<p>Student loan debt is crippling a...   fashion
id元数据标题
123{“dek”:“学生贷款债务正在削弱g…渠道
124{“dek”:“学生贷款债务正在削弱一种……时尚
尝试使用以下代码:

sample_df['metadata'] = sample_df['metadata'].apply(json.loads)
Panda的apply函数,在序列的每个值上传递函数。它非常有用,因为你可以跳过每一行的迭代。
如果您想了解有关此函数和可以更改的参数的更多信息,请参阅官方文档。

编辑:我读错了问题。您想将字符串转换为python dict。下面是一个完整的工作示例

从io导入StringIO
导入json
作为pd进口熊猫
#读取数据
s=StringIO(“”)id、元数据、标题
123,{“dek”:“学生贷款

”},频道 124,{“dek”:“学生贷款

”},时尚“) df=pd.read\U csv df.loc[:,“metadata”]=df.loc[:,“metadata”].apply(json.loads) df.head() #id元数据标题 #0 123{'dek':'学生贷款

'}频道 #1124{'dek':'Student loan

'
除此之外,您还可以使用

以下是答案:

sample_df["new_column"] = sample_df.metadata.apply(json.loads)

输出是:
{“dek”:“别忘了买一张卡,

”,“links”:{“edit”:{“dev”:“…}}}

Hmmm它给了我一个完全相同的错误:
TypeError:JSON对象必须是str、bytes或bytearray,而不是dict
很抱歉这个愚蠢的问题,但是你在for循环之外使用了代码?你能共享数据帧的样本吗?在for循环之外,正确。我编辑了我的问题,提供了一个数据集的示例。类型of
元数据
列在我的环境中正常工作。您可以尝试使用json.dumps而不是json.loads。如果不起作用,您可以向我发送pandas和json的版本吗?很抱歉我的回复太晚。您可以尝试以下操作:
对于df['metadata3']中的项:对于键,值在项中。项():打印(键)
显然有正确的缩进。我也试过了。
sample_-df['metadata']=sample_-df['metadata'].to_-json,但它给了我一个错误。
TypeError:无法连接类型为“”的对象;只有Series和DataFrame-objs有效`这很奇怪,因为这个列是Series…运行以下命令:
df.loc[:,“metadata”]=df.loc[:,“metadata”].apply(json.loads)
并返回了相同的错误,即
TypeError:json对象必须是str、bytes或bytearray,而不是dict
,这表明
df[“metadata”]
已经是
dict
…所以问题解决了吗?用以下代码解决了:
示例df[“新列”]=sample_df.metadata.apply(json.loads)
其他两个答案(和)已经显示了这一点…@jakub这些是同一个问题的答案(我自己已经发布了),但没有一个有效。我发布了专门针对我的问题的答案。
sample_df["new_column"] = sample_df.metadata.apply(json.loads)