Python 从中的json列提取的值创建数据帧
我将一个.csv文件加载到df中,列的一行包含一个字典列表,如下所示Python 从中的json列提取的值创建数据帧,python,pandas,Python,Pandas,我将一个.csv文件加载到df中,列的一行包含一个字典列表,如下所示 data = [{"character": "Jake Sully", "gender": 2,}, {"character": "Neytiri", "gender": 1}, {"character": "Dr. Grace Augustine","gender": 1},
data = [{"character": "Jake Sully", "gender": 2,}, {"character": "Neytiri", "gender": 1},
{"character": "Dr. Grace Augustine","gender": 1},
{"character": "Col. Quaritch", "gender": 2]
当然,在加载它之后,它会被读取为字符串。因此,我将列中的每一行转换为json,这使得基于键名提取值变得很容易。然后我需要像这样创建一个单独的df
df = {'character': ['Jake Sully','Neytiri', 'Dr. Grace Augustine', 'Col.Quaritch'],
'gender': [2, 1, 1, 2]}
这是我的代码,但我不能完全正确地获得所需的df输出
df = pd.DataFrame() #create new df
keys = ['character','gender'] #keys to extract values from json
lst=[]
for val in data: #to iterate over data series
for object in json.loads(val):
for key in keys:
lst.append(object[key])
df = pd.concat([df,pd.DataFrame(lst,columns=[key])], axis=1)
有人能告诉我我做错了什么吗?
pd.DataFrame
直接接受字典列表:
data = [{"character": "Jake Sully", "gender": 2,},
{"character": "Neytiri", "gender": 1},
{"character": "Dr. Grace Augustine","gender": 1},
{"character": "Col. Quaritch", "gender": 2}]
df = pd.DataFrame(data) # or pd.DataFrame.from_dict(data)
print(df)
character gender
0 Jake Sully 2
1 Neytiri 1
2 Dr. Grace Augustine 1
3 Col. Quaritch 2
因此,您只需要从json文件中提取字典列表。一种方法是通过json.loads
更好的方法是通过
pd将数据直接读取到数据框中。read_json
pd。数据框
直接接受字典列表:
data = [{"character": "Jake Sully", "gender": 2,},
{"character": "Neytiri", "gender": 1},
{"character": "Dr. Grace Augustine","gender": 1},
{"character": "Col. Quaritch", "gender": 2}]
df = pd.DataFrame(data) # or pd.DataFrame.from_dict(data)
print(df)
character gender
0 Jake Sully 2
1 Neytiri 1
2 Dr. Grace Augustine 1
3 Col. Quaritch 2
因此,您只需要从json文件中提取字典列表。一种方法是通过json.loads
一个更好的方法是通过pd将数据直接读入数据框。阅读json我可能不完全理解你的问题,但我可以很好地理解df
data = [{"character": "Jake Sully", "gender": 2,},
{"character": "Neytiri", "gender": 1},
{"character": "Dr. Grace Augustine","gender": 1},
{"character": "Col. Quaritch", "gender": 2}]
pd.DataFrame(data)
输出:
我可能不完全理解你的问题,但我能很好地理解你的问题
data = [{"character": "Jake Sully", "gender": 2,},
{"character": "Neytiri", "gender": 1},
{"character": "Dr. Grace Augustine","gender": 1},
{"character": "Col. Quaritch", "gender": 2}]
pd.DataFrame(data)
输出:
我明白了
df = pd.DataFrame() #create new df
keys = ['character','gender'] #keys to extract values from json
for i,key in enumerate(keys):
lst_i = []
for row in data: #iterating over the rows in the cols of interest
for object in json.loads(row):
lst_i.append(object[key])
df = pd.concat([df,pd.DataFrame(lst_i,columns=[key])], axis=1)
我明白了
df = pd.DataFrame() #create new df
keys = ['character','gender'] #keys to extract values from json
for i,key in enumerate(keys):
lst_i = []
for row in data: #iterating over the rows in the cols of interest
for object in json.loads(row):
lst_i.append(object[key])
df = pd.concat([df,pd.DataFrame(lst_i,columns=[key])], axis=1)
谢谢,但正如我提到的,该文件是一个.csv文件,其中包含一列字典列表。在pd.read_csv('filename.csv')之后,我确实在上面的代码中使用了json.loads。我使用了,但是我得到了一个ValueError:预期的对象或值。这就是为什么我加载为pd.read\u csv('filename.csv'),之后我迭代列中的每一行,然后使用json.loads(row\u in\u col\u on\u inters)。对不起!打字错误V实际上是数据中val的迭代器val:have updated它。@Zoozoo,您可以尝试在您的问题中包括
pd.read\u csv('filename.csv')。to\u dict()
。谢谢,但正如我提到的,该文件是一个.csv文件,其中包含一列字典列表。在pd.read_csv('filename.csv')之后,我确实在上面的代码中使用了json.loads。我使用了,但是我得到了一个ValueError:预期的对象或值。这就是为什么我加载为pd.read\u csv('filename.csv'),之后我迭代列中的每一行,然后使用json.loads(row\u in\u col\u on\u inters)。对不起!打字错误V实际上是数据中val的迭代器val:have updated它。@Zoozoo,您可以尝试在您的问题中包括pd.read\u csv('filename.csv')。to\u dict()
。数据只代表感兴趣列的一行。这是为了显示在我使用pd.read_csv('filename.csv')加载.csv文件后,此列将作为字符串加载。数据仅表示感兴趣的列中的一行。这是为了显示在我使用pd.read_csv('filename.csv')加载.csv文件后,此列将作为字符串加载。