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