我想将一个列表(似乎是字典列表(其中包含其他列表))转换为熊猫数据框。
以下是我的数据示例:
['b"{',
'n boxers: [',
'n {',
'n age: 30,',
'n hasBoutScheduled: true,',
'n id: 489762,',
'n last6: [Array],',
"n name: 'Andy Ruiz Jr',",
'n points: 754,',
'n rating: 100,',
'n record: [Object],',
'n residence: [Object],',
"n stance: 'orthodox'",
'n },',
'n {',
'n age: 34,',
'n hasBoutScheduled: true,',
'n id: 468841,',
'n last6: [Array],',
"n name: 'Deontay Wilder',",
'n points: 622,',
'n rating: 100,',
'n record: [Object],',
'n residence: [Object],',
"n stance: 'orthodox'",
'n },',
'n {',
'n age: 30,',
'n hasBoutScheduled: true,',
'n id: 659461,',
'n last6: [Array],',
"n name: 'Anthony Joshua',",
'n points: 603,',
'n rating: 100,',
'n record: [Object],',
'n residence: [Object],',
"n stance: 'orthodox'",
'n },'
这是我到目前为止尝试过的:
pd.DataFrame.from_records(unclean_file)
这将产生约27列-大概是每个空格,逗号等的列。
我也尝试过使用ChainMap 从集合中导入ChainMap
pd.DataFrame.from_dict(ChainMap(*unclean_file),orient='index',columns=['age','hasBoutScheduled','id','last6','name','points','rating','record','residence','stance'])
这将产生错误消息: ValueError:字典更新序列元素#0的长度为1;需要2个
注意:当我提取数据时,我将其转换为列表,以阐明我正在使用naked package运行一个node.js文件,该文件返回json输出,然后我将其保存到成功变量中,最初是字节字符串格式,然后转换为列表:
success = muterun_js('index.js')
unclean_file = [str(success.stdout).split('\\')]
答案 0 :(得分:0)
您正在读取json格式的数据,因此使用unclean_file = json.loads(success)
代替unclean_file = [str(success.stdout).split('\\')]
更有意义。
这应该返回一个dict对象,您可以将其直接插入DataFrame中。
此外,您可能需要解码数据。
import json
import pandas as pd
success= success.decode('utf-8') # decode your content. Might not be necessary.
unclean_file = json.loads(success)
data = pd.DataFrame(unclean_file , index=[0])
答案 1 :(得分:0)
拆分数据字符串无济于事-使其解析起来更加困难。
错误消息:JSONDecodeError:期望属性名称用双引号引起来:第2行第3列(字符4)
这显然表明一个问题是未加引号的键;进一步的问题是未引用的值true
,Array
和Object
。但是纠正所有这些并不难:
unclean_string = success.stdout.decode()
import re
clean_string = re.sub(r'\w+(?=[],:])', r'"\g<0>"', unclean_string)
以上引述了所有标识符,后跟:
,,
或]
,我们得到了格式良好的dict
表示形式,我们可以对其进行评估和制作DataFrame
的
pd.DataFrame(eval(clean_string)['boxers'])