上回简单介绍了Pandas Series,我们了解到Series对象是一维标签(索引)数组,能够保存不同的数据类型,比如整型,浮点型,字符串或其他Python对象类型。
这次要介绍的是Pandas的另一种数据结构——Pandas DataFrame。DataFrame是一个二维标签的数组对象,和Series一样,DataFrame能接受不同类型的数据输入。
DataFrame包含行索引和列索引,你可以将它简单理解为类似于数据库表的结构,或者是包含字典类型的Series。
一、创建DataFrame对象
创建DataFrame对象的方式很多,主要有以下几种:
1.由包含ndarray或列表的字典构造
ndarray或列表的长度必须一致,相应地,传递的索引长度也必须与数组的长度相同。
import pandas as pd data = {'a':[1, 2, 3, 4], 'b': [5, 6, 7, 8], 'c': [9, 10, 11, 12]} pd.DataFrame(data)
运行结果:
添加索引:
df=pd.DataFrame(data, index=['one', 'two', 'three', 'four']) df
运行结果:
还可以通过访问index和columns属性来访问行列标签:
df.index
df.columns
2.由包含Series的字典或嵌套字典构造
data1 = {'a': pd.Series([1, 2, 3]), 'b': pd.Series([1, 2, 3, 4]), 'c': pd.Series([1, 2, 3, 4, 5])} pd.DataFrame(data1)
运行结果:
注意:NaN代表缺失的数据。
添加索引:
data1 = {'a': pd.Series([1, 2, 3], index=['one', 'two', 'three']), 'b': pd.Series([1, 2, 3, 4], index=['one', 'two', 'three', 'four']), 'c': pd.Series([1, 2, 3, 4, 5], index=['one', 'two', 'three', 'four', 'five'])} pd.DataFrame(data1)
运行结果:
pd.DataFrame(data1, index=['five', 'four', 'three'])
pd.DataFrame(data1, index=['five', 'four', 'three'], columns=['b', 'c', 'd'])
3.由包含字典的列表构造
data2 = [{'a': 1, 'b': 2, 'c': 3}, {'a': 4, 'b': 5, 'c': 6}, {'a': 7, 'b': 8, 'c': 9, 'd': 10}] pd.DataFrame(data2)
运行结果:
pd.DataFrame(data2, index=['one', 'two', 'three'], columns=['a', 'b', 'd'])
除了上面几种创建DataFrame对象的方法,还可以使用数组、元组等方式构造,方法比较类似,这里不作赘述。
二、对DataFrame对象的列的操作
类似于字典操作,对一个DataFrame对象可以进行获取列的值、对列赋值或删除列的操作。
我们以上述df为例,对该对象的列进行操作。
# 获取Name为a的列的值 df['a']
# 获取Name为a的列的值并对值进行计算 df['a']*3-2
# 对列值进行计算 df['d'] = df['a'] + df['b'] df['TF'] = df['d'] > 9 df
# 删除列 del df['TF'] df
# 取出列 pt = df.pop('d') df
# 被取出的列 pt
# 当插入一个标量值时,它会自动填满整列 df['True'] = 'T' df