Pandas 创建DataFrame,Pandas 数据帧(DataFrame)是二维数据结构,它包含一组有序的列,每列可以是不同的数据类型,DataFrame
既有行索引,也有列索引,它可以看作是Series
组成的字典,不过这些Series
共用一个索引。
数据帧(DataFrame)的功能特点:
- 不同的列可以是不同的数据类型
- 大小可变
- 含行索引和列索引
- 可以对行和列执行算术运算
假设要创建一个包含学生信息的DataFrame,如下图所示:
DataFrame 结构体
pandas中的DataFrame
可以使用以下构造函数创建:
pandas.DataFrame( data, index, columns, dtype, copy)
构造函数的参数说明如下:
参数 | 说明 |
---|---|
data |
支持多种数据类型,如:ndarray ,series ,map ,lists ,dict ,constant 和另一个DataFrame 。 |
index |
行标签,如果没有传递索引值,默认值为np.arrange(n) |
columns |
列标签,如果没有传递索引值,默认值为np.arrange(n) |
dtype |
每列的数据类型。 |
copy |
是否复制数据,默认值为False |
Pandas数据帧(DataFrame)支持多种输入类型来创建
- 列表(list)
- 字典(dict)
- 系列(series)
- Numpy ndarrays
- 其他数据帧(DataFrame)
下面介绍如何创建数据帧(DataFrame)。
创建一个空的 DataFrame
#import the pandas library and aliasing as pd
import pandas as pd
df = pd.DataFrame()
print (df)
执行结果如下:
Empty DataFrame
Columns: []
Index: []
从列表创建 DataFrame
可以使用单个列表或二维列表创建数据帧(DataFrame)。
例1:单个列表创建DataFrame
import pandas as pd
data = [1,2,3,4,5]
df = pd.DataFrame(data)
print (df)
执行结果如下:
0
0 1
1 2
2 3
3 4
4 5
例2:二维列表创建DataFrame
import pandas as pd
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'])
print (df)
执行结果如下:
Name Age
0 Alex 10
1 Bob 12
2 Clarke 13
例3:二维列表创建DataFrame,并指定dtype
import pandas as pd
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'],dtype=float)
print (df)
执行结果如下:
Name Age
0 Alex 10.0
1 Bob 12.0
2 Clarke 13.0
注: 可以观察到,
dtype
参数将Age
列的类型更改为浮点。
从 ndarrays/Lists 的字典来创建 DataFrame
所有的ndarrays
必须具有相同的长度。如果传递了索引(index
),则索引的长度应等于数组的长度。
如果没有传递索引,则默认情况下,索引为range(n)
,其中n
为数组长度。
import pandas as pd
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data)
print (df)
执行结果如下:
Age Name
0 28 Tom
1 34 Jack
2 29 Steve
3 42 Ricky
注:观察值
0
,1
,2
,3
,它们是分配给每个使用函数range(n)
的默认索引。
使用列表作为索引,创建一个数据帧(DataFrame)。
import pandas as pd
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data, index=['rank1','rank2','rank3','rank4'])
print (df)
执行结果如下:
Age Name
rank1 28 Tom
rank2 34 Jack
rank3 29 Steve
rank4 42 Ricky
注:
index
参数为每行分配一个索引。
从字典列表创建 DataFrame
字典列表
可作为输入数据用来创建数据帧(DataFrame),字典键默认为列名。
例1:传递字典列表来创建数据帧(DataFrame)。
import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
print (df)
执行结果如下:
a b c
0 1 2 NaN
1 5 10 20.0
注:观察到,使用
NaN
填写空白区域
例2:传递字典列表和行索引来创建数据帧(DataFrame)。
import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data, index=['first', 'second'])
print (df)
执行结果如下:
a b c
first 1 2 NaN
second 5 10 20.0
例3:以下示例显示如何使用字典,行索引和列索引列表创建数据帧(DataFrame)。
import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
#With two column indices, values same as dictionary keys
df1 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b'])
#With two column indices with one index with other name
df2 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b1'])
print (df1)
print (df2)
执行结果如下:
a b
first 1 2
second 5 10
a b1
first 1 NaN
second 5 NaN
注:
df1
是使用列索引创建的,与字典键相同
df2
使用字典键以外的列索引创建DataFrame
,使用NaN
填写空白区域
从 Series 字典来创建 DataFrame
通过传递 Series 字典来创建DataFrame,最终索引是两个Series索引的并集。
import pandas as pd
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print (df)
执行结果如下:
one two
a 1.0 1
b 2.0 2
c 3.0 3
d NaN 4
注:对于第一个
Series
,观察到没有包含索引'd'
,输出结果中,对应索引d
区域,填写NaN。