- 创建:创建DataFrame的方法有很多,最常用的一种是直接传入一个由等长列表或Numpy数组组成的字典:
import pandas as pd
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
print(frame)
DataFrame会自动加上索引(跟Series一样)。并且全部列会被有序排列。
- 对于特别大的DateFrame,head()方法会选取前五行:
import pandas as pd
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
print(frame.head())
- 如果指定了列序列,则DataFrame的列就会按照指定顺序进行排列。
import pandas as pd
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop'])
print(frame1)
- 如果传入的列在数据中找不到,就会在结果中产生缺失值。
import pandas as pd
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
index=['one', 'two', 'three', 'four','five', 'six'])
print(frame1)
print(frame1.columns)
- 访问(索引):通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series:
import pandas as pd
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
index=['one', 'two', 'three', 'four','five', 'six'])
print(frame1['state'])
print()
print(frame1.year)
这里返回的Series拥有原DataFrame相同的索引,其name属性也已经被相应的设置好了。
- 行也可以通过位置或名称的方式进行获取,比如用loc属性。
import pandas as pd
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
index=['one', 'two', 'three', 'four','five', 'six'])
print(frame1.loc['three'])
- 列可以用赋值的方式进行修改。例如,可以给之前空的’debt’列赋上一个标量或者一组值
import pandas as pd
import numpy as np
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
index=['one', 'two', 'three', 'four','five', 'six'])
frame1['debt'] = 16.5
print(frame1)
print()
frame1['debt'] = np.arange(6.)
print(frame1)
- 将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配。
如果赋值的是一个Series,就会精确匹配DataFrame的索引。所有的空位都被填上缺失值:
import pandas as pd
import numpy as np
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
index=['one', 'two', 'three', 'four','five', 'six'])
val = pd.Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five'])
frame1['debt'] = val
print(frame1)
- 为不存在的列赋值会创建出一个新列。关键字del用于删除列。
这里先添加一列,state是否为’Ohio’
import pandas as pd
import numpy as np
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
# print(frame)
# print(frame.head())
frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
index=['one', 'two', 'three', 'four', 'five', 'six'])
frame1['eastern'] = frame1.state == 'Ohio' # 注意不能用frame2.eastren创建新的列
print(frame1)
print()
del frame1['eastern']
print(frame1.columns)
注意:***通过索引方式返回的列只是相应数据的视图而已,并不是副本。因此,对返回的Series所做的任何就地修改全部都会反映到源DataFrame上。***通过Series的copy方法可以指定复制列。
- 另一种常见的数据形式是嵌套字典,如果嵌套字典传给DataFrame,pandas就会被解释为:外层字典的键作为列,内层键作为行索引。内层字典的键会被合并、排序以形成最终的索引。
import pandas as pd
pop = {'Nevada': {2001: 2.4, 2002: 9.9}, 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.9}}
frame = pd.DataFrame(pop)
print(frame)
如果指定了索引,就不会这样:
frame = pd.DataFrame(pop, index=[2001, 2002, 2003])
- 也可以使用Numpy数组的方法,对DataFrame进行转置(交换行和列)。
print(frame.T)
- DataFrame的index和columns也有name属性。可以设置。
import pandas as pd
pop = {'Nevada': {2001: 2.4, 2002: 9.9}, 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.9}}
frame = pd.DataFrame(pop)
frame = pd.DataFrame(pop, index=[2001, 2002, 2003])
frame.index.name = 'year'
frame.columns.name = 'state'
print(frame)
- 和Series一样,values属性也会以二位ndarray的形式返回DataFrame中的数据。
print(frame.values)
-
如果DataFrame各列的数据类型不同,则value数组的dtype就会选用能兼容所有列的数据类型。因为ndarray数组内的所有元素具有相同的数据类型
-
DataFrame是一个表格型的数据结构。它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典。(共同用一个索引)。DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。
-
虽然DataFrame以二维结构保存数据,但是仍然可以轻松的将其表示为更高维度的数据(层次化索引的表格型结构),这是pandas中许多高级数据处理功能的关键要素。