微信公众号: python数据科学家
【要点抢先看】
1.DataFrame是若干有序排列的Series对象
2.DataFrame可以看作含有行索引和列索引的二维数组结构
3.DataFrame可以看作是特殊字典,反应了列索引到Series的映射关系
4.DataFrame的常见创建方法
【妹子说】按照上一集的思路,今天我们继续学习Pandas的另一个基础数据结构DataFrame吧。
我们依然按照前面的学习路线图,对DataFrame数据对象先进行一个全局的概览。
如果说Series对象可以类比为带灵活索引类型的一维数组,那么对比的看,DataFrame可以被看做是既有灵活的行索引,又有灵活列索引的二维数组。那么我们可以这么说:
DataFrame是有序排列的若干Series对象,而这些Series对象都有相同的索引。
我们来演示这个过程:
import pandas as pd
area_dict = {'California':423967,'Texas':695662,'New York':141297}
population_dict = {'California':1.3, 'Texas':0.98, 'New York':1.13}
area = pd.Series(area_dict)
population = pd.Series(population_dict)
print(area)
print(population)
California 423967
New York 141297
Texas 695662
dtype: int64
California 1.30
New York 1.13
Texas 0.98
dtype: float64
这是我们初始的两个Series对象,接下来我们借助他们来展示Series和DataFrame的关系。我们可以用一个字典来构建含有这两个Series数据的二维对象,这就是DataFrame.
import pandas as pd
area_dict = {'California':423967,'Texas':695662,'New York':141297}
population_dict = {'California':1.3, 'Texas':0.98, 'New York':1.13}
area = pd.Series(area_dict)
population = pd.Series(population_dict)
states_df = pd.DataFrame({'area':area,'population':population})
print(states_df)
area population
California 423967 1.30
New York 141297 1.13
Texas 695662 0.98
可以看到,利用含有Series作为值的字典,就可以构造一个DataFrame,不难看出,这个字典的值,即一组Series对象,共享了行索引(index),而这个字典的一组键,则构成了这个DataFrame对象的列索引(columns)。
获取DataFrame对象的行、列索引值也非常简单:
import pandas as pd
states_df = pd.DataFrame({'area':area,'population':population})
print(states_df.index)
print(states_df.columns)
Index(['California', 'New York', 'Texas'], dtype='object')
Index(['area', 'population'], dtype='object')
可以看出,通过index属性,我们获取了其行索引,通过columns,我们获取了其列索引。所以我们可以总结一下,DataFrame可以看作是具有行、列索引的二维表格型数组结构。
那么,类似的,DataFrame和字典有何关联呢?从上面利用两个Series构造DataFrame的过程中我们不难发现,DataFrame也可以看做是特殊的字典,他的键是列索引,其映射的值就是一个个的Series对象。
import pandas as pd
states_df = pd.DataFrame({'area':area,'population':population})
print(states_df['area'])
California 423967
New York 141297
Texas 695662
Name: area, dtype: int64
获取DataFrame内部数据元素的方法还有很多,不过还是老话,这一集只从全景上来把握DataFrame对象,更细的知识我们后面几集慢慢分解。
最后,我们来总结一下DataFrame对象的几种常见创建形式:
第一种,通过Series对象字典创建,这个刚刚举过例子。
第二种,因为DataFrame是特殊的字典,因此可以通过一个字典列表来创建:
import pandas as pd
data = [{'a':13,'b':4},{'a':'CHN','b':'USA'}]
df = pd.DataFrame(data,index=['c','d'])
print(df)
a b
c 13 4
d CHN USA
第三种,同时字典是带有行列索引的二维数组结构,因此可以用NumPy二维数组创建:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(3,2),
columns=['foo','bar'],
index=['a','b','c'])
print(df)
foo bar
a 0.249028 0.450017
b 0.885382 0.742781
c 0.329082 0.579758
【妹子说】感觉这种表格型的数据结构应该是挺有用的,因为很多实际的数据源都是这种形式,很容易直观的存储和展现数据。