2016-07-07 60 views
0

我有一个熊猫数据帧的形式,它看起来像这样的数据:JSON数据列在数据帧

A  B        C 
ab  {"app":"x","wid":10,"a42":5} e 
y  {"hair":"x","wid":10,"a42":2} r 

,我想我的数据帧转换是这样的:

A C app wid a42 hair 
ab e x  10  5  - 
y r -  10  2  r 

这些问题是没有帮助的:
JSON to pandas DataFrame
Convert Json data to Python DataFrame
How to convert a parsed json file to pandas data frame?

而且我也看到了很多其他的链接,但都陷入了这个问题。

+0

重复? http://stackoverflow.com/questions/38231591/splitting-dictionary-list-inside-a-pandas-column-into-separate-columns/38233518#38233518 – Merlin

回答

1

试试这个:

In [143]: df.B.apply(pd.Series) 
Out[143]: 
    a42 app hair wid 
0 5 x NaN 10 
1 2 NaN x 10 
1

您可以使用DataFrame.from_recordsconcat

import pandas as pd 

df = pd.DataFrame({'A':['ab','y'], 
        'B':[{"app":"x","wid":10,"a42":5},{"hair":"x","wid":10,"a42":2}], 
        'C':['e','r']}) 
print (df) 
    A         B C 
0 ab {'a42': 5, 'wid': 10, 'app': 'x'} e 
1 y {'a42': 2, 'wid': 10, 'hair': 'x'} r 

print (pd.DataFrame.from_records(df.B)) 
    a42 app hair wid 
0 5 x NaN 10 
1 2 NaN x 10 

print (pd.concat([df[['A','C']], pd.DataFrame.from_records(df.B)], axis=1)) 
    A C a42 app hair wid 
0 ab e 5 x NaN 10 
1 y r 2 NaN x 10 
+0

我没有这种形式的数据:{'A' :['ab','y'], 'B':[{“app”:“x”,“wid”:10,“a42”:5},{“hair”:“x”,“wid “:10,”a42“:2}], 'C':['e','r']}。我以数据框的形式存在,当我在执行“pd.DataFrame.from_records(df.B)”过程时,结果出错。 –

+0

是的,我知道。你有'df'形式的数据,对吧?我添加了创建df更好的测试。 – jezrael

+0

输出有什么问题?列的排序? – jezrael

1

试试这个;

df["B"] = df["B"].apply(lambda x : dict(eval(x))) 
or 
df["B"] = df["B"].map(eval) 

df2 = df["B"].apply(pd.Series) 
result = pd.concat([df, df2], axis=1).drop('B', axis=1) 
+0

如果这个答案有帮助,请注意并纠正它是否正确。 – Merlin