一、 ndarray:
>>> pd.DataFrame(np.arange(15).reshape(3,5))
0 1 2 3 4
0 0 1 2 3 4
1 5 6 7 8 9
2 10 11 12 13 14
>>>
二、由数组、列表、元组组成的字典。
>>> pd.DataFrame({'a':np.array([1,2,3,4,5]),'b':list('hello'),'c':(1,3,5,7,9)})
a b c
0 1 h 1
1 2 e 3
2 3 l 5
3 4 l 7
4 5 o 9
>>>
三、由Series组成的字典。
>>> pd.DataFrame({'p1':pd.Series(['a','b','c']),'p2':pd.Series([1,2,3])})
p1 p2
0 a 1
1 b 2
2 c 3
>>>
>>> pd.DataFrame({'p1':pd.Series(['a','b','c'],index=['x','y','z']),'p2':pd.Series([1,2,3])})
p1 p2
x a NaN
y b NaN
z c NaN
0 NaN 1.0
1 NaN 2.0
2 NaN 3.0
>>>
四、由字典组成的字典。
>>> pd.DataFrame({
'QU1':{'Row1':1,'Row2':2},
'QU2':{'Row1':3,'Row2':4,'Row3':5}
})
QU1 QU2
Row1 1.0 3
Row2 2.0 4
Row3 NaN 5
>>>
>>> pd.DataFrame({
'QU1':{'Row1':1,'Row2':2},
'QU2':{'Row1':3,'Row2':4,'Row2':5}
})
QU1 QU2
Row1 1 3
Row2 2 5
第二个示例中两个ROW2取了最后一个。
五、字典或者Series的列表
>>> pd.DataFrame([{'a':1,'b':2},{'a':3,'b':4}])
a b
0 1 2
1 3 4
>>> pd.DataFrame([{'a':1,'b':2},{'c':3,'d':4}])
a b c d
0 1.0 2.0 NaN NaN
1 NaN NaN 3.0 4.0
>>>
>>> a=pd.Series(list('abcde'))
>>> b=pd.Series(range(5))
>>> pd.DataFrame([a,b])
0 1 2 3 4
0 a b c d e
1 0 1 2 3 4
>>>
>>> a=pd.Series(list('abcde'))
>>> b=pd.Series(range(5),index=['p1','p2','p3','p4','p5'])
>>> pd.DataFrame([a,b])
0 1 2 3 4 p1 p2 p3 p4 p5
0 a b c d e NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN 0.0 1.0 2.0 3.0 4.0
>>>
六、由列表和数组组成的列表。
>>> pd.DataFrame([['a','b','c','d','e'],np.array(['a1','a2','a3','a4','a5']),list('hello')])
0 1 2 3 4
0 a b c d e
1 a1 a2 a3 a4 a5
2 h e l l o
>>>
七、另外一个DataFrame。
df=pd.DataFrame([['a','b','c','d','e'],np.array(['a1','a2','a3','a4','a5']),list('hello')])
>>> pd.DataFrame(df)
0 1 2 3 4
0 a b c d e
1 a1 a2 a3 a4 a5
2 h e l l o
>>>
>>> pd.DataFrame(df,columns=['P1','P2','P3','P4','P5'])
P1 P2 P3 P4 P5
0 NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN
总结:对于Series、DataFrame和字典需要仔细琢磨,特别是Series、DataFrame,涉及到索引的变换,总体原则是如果是列表[]形式的,里面的任何一项都是一行,如果是{}里面的任何一项是一列。
综合示例:
obj = """ {"name": "Wes", "places_lived": ["United States", "Spain", "Germany"], "pet": null, "siblings": [{"name": "Scott", "age": 30, "pets": ["Zeus", "Zuko"]}, {"name": "Katie", "age": 38, "pets": ["Sixes", "Stache", "Cisco"]}] } """
先把Json的字符串转换成PYTHON字典对象。
>>> import json
>>> result=json.loads(obj)
>>> result
{
'name': 'Wes',
'places_lived': ['United States', 'Spain', 'Germany'],
'pet': None,
'siblings': [{'name': 'Scott', 'age': 30, 'pets': ['Zeus', 'Zuko']},
{'name': 'Katie', 'age': 38, 'pets': ['Sixes', 'Stache', 'Cisco']}]}
>>>
我们分析siblings这,得到用户和年龄(name,age),result是个字典。
>>> result['siblings']
[{'name': 'Scott', 'age': 30, 'pets': ['Zeus', 'Zuko']}, {'name': 'Katie', 'age': 38, 'pets': ['Sixes', 'Stache', 'Cisco']}]
>>>
返回是个列表,看都不用看就知道,列表里面的每一项代表一行。
{'name': 'Scott', 'age': 30, 'pets': ['Zeus', 'Zuko']}这是一行
{'name': 'Katie', 'age': 38, 'pets': ['Sixes', 'Stache', 'Cisco']}这是一行
所以他的基本形式就是这样:
Scott 30 ['Zeus', 'Zuko']
katie 38 ['Sixes', 'Stache', 'Cisco']
索引应该怎么分配呢,很显然name,age,pets应该是列索引,行索引自动分配,才是正规的DataFrame。试试看。
>>> pd.DataFrame(result['siblings'])
name age pets
0 Scott 30 [Zeus, Zuko]
1 Katie 38 [Sixes, Stache, Cisco]
>>>
符合分析的预期。