之前我们已经介绍过,DataFrame数据框和Series序列一起,是pandas的最核心的两种数据结果。而且,由Series可以拼接成为DataFrame。
如下图所示:
我们继续看下DataFrame完整的pandas官方介绍:DataFrame is a 2-dimensional labeled data structure with columns of potentially different types. You can think of it like a spreadsheetor SQL table, or a dict of Series objects. It is generally the most commonly used pandas object. Like Series, DataFrame accepts many different kinds of input:Dict of 1D ndarrays, lists, dicts, or Series - 一维数组字典、列表、字典,或者序列
2-D numpy.ndarray - 二维的NumPy数组
A Series- 单个序列
Another DataFrame - 另外一个数据框
下面通过多种方法,演示如何创建一个DataFrame数据框。
通过列表list数据进行转换:
import pandas as pd
import numpy as np
list1 = [[1, 2, 3], ##几层中括号,就是几维的列表
[4, 5, 6],
[7, 8, 9]]
list1
Out[111]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
df1 = pd.DataFrame(list1) ##转换为数据框
df1
Out[113]:
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
通过NumPy生成的随机数进行转换
##通过NumPy的随机整数生成函数randint生成9个0-100的随机整数
##然后再通过NumPy的reshape转换为3x3的数组
array1 = np.random.randint(0, 101, 9).reshape(3, 3)
array1
Out[118]:
array([[92, 43, 65],
[73, 11, 93],
[96, 34, 2]])
##再通过pd.DataFrame转换为DataFrame
df2 = pd.DataFrame(array1)
df2
Out[121]:
0 1 2
0 92 43 65
1 73 11 93
2 96 34 2
##通过columns传入列名字
##通过index传入行索引index的取值
list1 = [[1, 2, 3], ##几层中括号,就是几维的列表
[4, 5, 6],
[7, 8, 9]]
df3 = pd.DataFrame(list1,
columns = ['a', 'b', 'c'],
index = ['x', 'y', 'z'])
df3
Out[124]:
a b c
x 1 2 3
y 4 5 6
z 7 8 9
通过字典dictionary数据进行转换
或者通过字典dictionary的方式,逐列创建数据框DataFrame。这里字典的键key,就转换为了DataFrame的列名;字典的值values,就转换为数据库的一列数据。
d1 = {'Name': ['Steph', 'LeBron', 'Harden'],
'Heihgt': [192, 206, 198]
}
d1
Out[79]: {'Name': ['Steph', 'LeBron', 'Harden'], 'Heihgt': [192, 206, 198]}
df4 = pd.DataFrame(d1)
df4
Out[81]:
Name Heihgt
0 Steph 192
1 LeBron 206
2 Harden 198
在Spyder中的Variable explorer中双击df4查看。
通过导入现成数据创建DataFrame:
这里以Excel数据为例。
我们先用Stata导出一个叫auto的xls数据集(Python的sklearn包也带有大量的范例数据集,但是用起来对新手不太友好)。
导出后的Excel文档如下。
我们使用pd.read_excel函数导入该Excel文档。
auto = pd.read_excel(r"D:\Stata\auto.xls")
auto.describe()
Out[105]:
price mpg rep78 ... turn displacement gear_ratio
count 74.000000 74.000000 69.000000 ... 74.000000 74.000000 74.000000
mean 6165.256757 21.297297 3.405797 ... 39.648649 197.297297 3.014865
std 2949.495885 5.785503 0.989932 ... 4.399354 91.837219 0.456287
min 3291.000000 12.000000 1.000000 ... 31.000000 79.000000 2.190000
25% 4220.250000 18.000000 3.000000 ... 36.000000 119.000000 2.730000
50% 5006.500000 20.000000 3.000000 ... 40.000000 196.000000 2.955000
75% 6332.250000 24.750000 4.000000 ... 43.000000 245.250000 3.352500
max 15906.000000 41.000000 5.000000 ... 51.000000 425.000000 3.890000
[8 rows x 10 columns]
str(auto)
Out[106]: ' make price mpg rep78 ... turn displacement gear_ratio foreign\n0 AMC Concord 4099 22 3.0 ... 40 121 3.58 Domestic\n1 AMC Pacer 4749 17 3.0 ... 40 258 2.53 Domestic\n2 AMC Spirit 3799 22 NaN ... 35 121 3.08 Domestic\n3 Buick Century 4816 20 3.0 ... 40 196 2.93 Domestic\n4 Buick Electra 7827 15 4.0 ... 43 350 2.41 Domestic\n.. ... ... ... ... ... ... ... ... ...\n69 VW Dasher 7140 23 4.0 ... 36 97 3.74 Foreign\n70 VW Diesel 5397 41 5.0 ... 35 90 3.78 Foreign\n71 VW Rabbit 4697 25 4.0 ... 35 89 3.78 Foreign\n72 VW Scirocco 6850 25 4.0 ... 36 97 3.78 Foreign\n73 Volvo 260 11995 17 5.0 ... 37 163 2.98 Foreign\n\n[74 rows x 12 columns]'
在变量浏览器中查看auto数据框,如下。
pd.read_excel的完整函数如下。其参数很多,我们这里只介绍几个常用的参数。pandas.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None,s queeze=False, dtype=None, engine=None, converters=None, true_values=None, false_values=None,skiprows=None,nrows=None,na_values=None,keep_default_na=True,na_filter=True,verbose=False,parse_dates=False,date_parser=None,thousands=None,comment=None,skipfooter=0,convert_float=True,mangle_dupe_cols=True)
pd.read_excel几个常用的参数解释:io:Excel文件的路径
sheet_name:sheet的名称
names:列名称的列表。如果这里指定的话,后面的hearder必须声明 header=None
header:指定作为列索引的行。通常是首行
index_col:制定作为行索引的列。通常是首列。和列索引一样,行索引的取值必须唯一
-----全文结束-----