Pandas是一种流行的数据科学Python软件包,它提供了强大和灵活的数据结构,使数据操作和分析变得很容易,从选择、替换列和索引到重塑数据,有很多优点。DataFrame是Pandas的结构之一。
本章节将介绍Pandas DataFrame从基本操作到高级的操作。本节的主要内容包含:
- 什么是Pandas DataFrame
- 创建Pandas DataFrame
- 多种方式创建Pandas DataFrame
- Pandas DataFrame的常见属性
- 获取Pandas DataFrame的数据
Pandas库中的DataFrame,它具有可能是不同类型的二维数组。通常,您可以说Pandas DataFrame由三个主要组件组成:数据、索引和列。
DataFrame可以包含以下数据:
DataFrame
Series
:一维标记的数组,能够保存带有轴标签或索引的任何数据类型。Series对象是DataFrame中的一列。ndarray
:可以是记录数组或结构化数组ndarray
ndarray
注意:np.ndarray
和np.array()
之间的差异,前者是实际数据类型,而后者是从其他数据结构生成数组的函数。
结构化数组允许用户通过命名字段操作数据:在下面的示例中,创建了三个元组的结构化数组。每个元组的第一个元素将被命名foo
并且将是int
类型,而第二个元素将被命名bar
并且将是一个浮点数。
另一方面,记录数组扩展了结构化数组的属性。它们允许用户按属性而不是索引访问结构化数组的字段。
import numpy as np
# 结构化数组
my_array = np.ones(3, dtype=([('foo', int), ('bar', float)]))
# 打印结构化数组
print(my_array['foo'])
# 记录数组
my_array2 = my_array.view(np.recarray)
# 打印记录数组
print(my_array2.foo)
除了数据,您还可以指定DataFrame的索引和列名称。索引一方面表示行的差异,而列名表示列的差异。稍后您将看到,当您操作数据时,DataFrame的这两个组件将派上用场。
如果你还未安装Pandas,请安装如下命令安装
pip install pandas
在可以作为创建’DataFrame’的输入的众多方式中,NumPy ndarray
就是其中之一。要以NumPy数组创建DataFrame,您只需将其传递给DataFrame()
函数中的data
参数即可。
import numpy as np
import pandas as pd
data = np.array([[1, 2],
[3, 4]])
print(pd.DataFrame(data), "\n")
data = np.array([['', 'Col1', 'Col2'],
['Row1', 1, 2],
['Row2', 3, 4]])
print(pd.DataFrame(data=data[1:, 1:],
index=data[1:, 0],
columns=data[0, 1:]))
输出如下:
0 1
0 1 2
1 3 4
Col1 Col2
Row1 1 2
Row2 3 4
这种创建DataFrame的方法对于可以作为DataFrame()
输入的所有结构都是一样的。
其中的三个参数:
再看一下下面的示例代码:
import numpy as np
import pandas as pd
# 将2D数组作为DataFrame的输入
my_2darray = np.array([[1, 2, 3], [4, 5, 6]])
print(pd.DataFrame(my_2darray))
# 将字典作为DataFrame的输入
my_dict = {1: ['1', '3'], 2: ['1', '2'], 3: ['2', '4']}
print(pd.DataFrame(my_dict))
# 将DataFrame作为DataFrame的输入
my_df = pd.DataFrame(data=[4, 5, 6, 7], index=range(1, 5), columns=['A'])
print(pd.DataFrame(my_df))
# 以Series作为DataFrame的输入
my_series = pd.Series({"United Kingdom":"London", "India":"New Delhi", "United States":"Washington", "Belgium":"Brussels"})
print(pd.DataFrame(my_series))
运行后输出如下:
0 1 2
0 1 2 3
1 4 5 6
1 2 3
0 1 1 2
1 3 2 4
A
1 4
2 5
3 6
4 7
0
United Kingdom London
India New Delhi
United States Washington
Belgium Brussels
注意:Series和DataFrame的索引包含原始字典的键,但它们是按顺序排列的。
在创建DataFrame之后,您可以将shape
属性或len()
函数与.index
属性结合使用。
import numpy as np
import pandas as pd
df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6]]))
print("df:\n", df)
print("df.shape:", df.shape)
print("len(df.index):", len(df.index))
print("df[0].count():", df[0].count())
print("list(df.columns.values):", list(df.columns.values))
运行后输出如下:
df:
0 1 2
0 1 2 3
1 4 5 6
df.shape: (2, 3)
len(df.index): 2
df[0].count(): 2
list(df.columns.values): [0, 1, 2]
代码解释:
shape
属性将为您提供DataFrame的尺寸。这意味着您将了解DataFrame的宽度和高度。len()
函数与index
属性一起使用,会提供DataFrame高度的信息。df[0].count()
以了解有关DataFrame高度的更多信息。如果有NaN
值的话,可以将其排除。df.columns.values
获取列名称。与数组一样,创建Pandas DataFrame后我们需要知道如何获取指定的元素。
import numpy as np
import pandas as pd
df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
index=[1, 2, 0],
columns=[48, 49, 50])
print(df)
# 用.iloc[][]选择指定元素
print("\ndf.iloc[1][48]:\n", df.iloc[1][48])
# 用.iloc[]选择相应位置的那行
print("\ndf.iloc[1]:\n", df.iloc[1])
# 用.loc[]选择相应标签的那行
print("\ndf.loc[1]:\n", df.loc[1])
# 用.loc[:, 'A']选择列
print("\ndf.loc[:, 48]:\n", df.loc[:, 48])
运行后输出如下:
48 49 50
1 1 2 3
2 4 5 6
0 7 8 9
df.iloc[1][48]:
4
df.iloc[1]:
48 4
49 5
50 6
Name: 2, dtype: int64
df.loc[1]:
48 1
49 2
50 3
Name: 1, dtype: int64
df.loc[:, 48]:
1 1
2 4
0 7
Name: 48, dtype: int64
代码解释:
.iloc[][]
:选择指定元素,注意:第一个参数是行号的位置,而不是标签,第二个参数是列名称。.iloc[]
:选择行,是基于位置的索引.loc[]
:选择行,是基于标签的索引.loc[][:, 'A']
:选择列注意.loc[]
和.iloc[]
这两者之间的细微差别。
通过本节的学习对了解了Pandas DataFrame的概念和对它基本的操作,下面我们再进一步对Pandas DataFrame进行学习。
若有疑问,欢迎联系作者(微信:lixu1770105)。