Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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
Pandas 如何从熊猫中看起来像字典的列中提取数据?_Pandas_Dataframe - Fatal编程技术网

Pandas 如何从熊猫中看起来像字典的列中提取数据?

Pandas 如何从熊猫中看起来像字典的列中提取数据?,pandas,dataframe,Pandas,Dataframe,嗨,我是新来的pandas/python并尝试在pandas 我想为每一行提取键,值对。 将键设为新列名,将其相应的值设为值 输入 data {'Name': 'Tim', 'Class': 'Ninth', 'Hobbies' : 'Football'} {'Name': 'Tom', 'Class': 'Ninth', 'Hobbies' : 'Football'} {'Name': 'Jim', 'Class': 'Ninth', 'Hobbies' : 'Football'} {

嗨,我是新来的
pandas
/
python
并尝试在
pandas
我想为每一行提取
对。 将
设为新列名,将其相应的
设为值

输入

data   
{'Name': 'Tim', 'Class': 'Ninth', 'Hobbies' : 'Football'} 
{'Name': 'Tom', 'Class': 'Ninth', 'Hobbies' : 'Football'}
{'Name': 'Jim', 'Class': 'Ninth', 'Hobbies' : 'Football'}
{'Name': 'John', 'Class': 'Ninth'}
预期产出

Name    Class   Hobbies
Tim Ninth   Football
Tom Ninth   Football
Jim Ninth   Football
John    Ninth   NA
错误:AttributeError:'str'对象没有属性“值”


pandas
中有什么方法可以做到这一点吗?

按照读取数据的方式,我可以使用
eval()
获得一个新的数据帧。这将在每个单元上迭代,创建一个新的数据帧,然后连接它们

data='''data
{'Name': 'Tim', 'Class': 'Ninth', 'Hobbies' : 'Football'} 
{'Name': 'Tom', 'Class': 'Ninth', 'Hobbies' : 'Football'}
{'Name': 'Jim', 'Class': 'Ninth', 'Hobbies' : 'Football'}
{'Name': 'John', 'Class': 'Ninth'}'''

df = pd.read_csv(io.StringIO(data), sep='\t', engine='python')
df1 = pd.concat([pd.json_normalize(eval(x)) for x in df['data']])
输出

   Name  Class   Hobbies
0   Tim  Ninth  Football
0   Tom  Ninth  Football
0   Jim  Ninth  Football
0  John  Ninth       NaN
如果你能得到这样的数据,这是Anurag Dabas提到的更简单的方法。您可能首先考虑将文件读入列表,然后创建数据文件,而不是从数据文件中创建数据文件。
datal = [{'Name': 'Tim', 'Class': 'Ninth', 'Hobbies' : 'Football'},
{'Name': 'Tom', 'Class': 'Ninth', 'Hobbies' : 'Football'},
{'Name': 'Jim', 'Class': 'Ninth', 'Hobbies' : 'Football'},
{'Name': 'John', 'Class': 'Ninth'}]
df = pd.DataFrame(datal)
df

pd.DataFrame(df1['data'].tolist())
?@Anurag-Dabas-这应该可以工作,但该数据的显示方式似乎在行的末尾有空格,导致它成为字符串。也许这就是它的粘贴方式,但如果你的公式有效,那就太好了。除此之外,下面的方法也可以。(+1)为了结合这两种方法,您可以使用
data\u list=[eval(line)for line in io.StringIO(data)]
然后使用
df=pd.DataFrame(data\u list)
datal = [{'Name': 'Tim', 'Class': 'Ninth', 'Hobbies' : 'Football'},
{'Name': 'Tom', 'Class': 'Ninth', 'Hobbies' : 'Football'},
{'Name': 'Jim', 'Class': 'Ninth', 'Hobbies' : 'Football'},
{'Name': 'John', 'Class': 'Ninth'}]
df = pd.DataFrame(datal)
df