Pandas DataFrames 是具有带标签的行和列的二维数据结构,可以存储很多类型的数据。
使用 Pandas Series 字典手动创建一个 DataFrame
- 第一步是创建
Pandas Series
字典。 - 第二步, 在字典创建完毕后,我们可以将该字典传递给
pd.DataFrame()
函数。
import pandas as pd
# 创建一个Pandas Series字典
items = {'Bob' : pd.Series(data = [245, 25, 55], index = ['bike', 'pants', 'watch']),
'Alice' : pd.Series(data = [40, 110, 500, 45], index = ['book', 'glasses', 'bike', 'pants'])}
# 输出看下是否是个字典
print(type(items))
shopping_carts = pd.DataFrame(items)
# 不使用 print,直接在jupyter notebook 上输出
shopping_carts
输出:
<class 'dict'>
shopping_carts 显示输出为:
此处:
- 行和列的标签以粗体形式显示
- DataFrame 的行标签根据构建字典所用的两个 Pandas Series 的索引标签创建而成
- DataFrame 的列标签来自字典的键
- 列按照字母顺序排序,而不是字典中的顺序, 而当我们从数据文件中向 DataFrame 加载数据时,不会发生这种情况
- 该 DataFrame 中出现了一些 NaN 值。NaN 是指非数字,Pandas 通过这种方式表示该行和列索引没有值,在创建 DataFrame 时,如果特定行索引的特定列没有值,Pandas 将用 NaN 值填充
- 如果要将此数据馈送到机器学习算法中,我们首先需要删掉这些 NaN 值
- 在上述例中,我们使用具有定义清晰的索引的 Pandas Series 字典创建了 Pandas DataFrame
- 如果我们不向 Pandas Series 提供索引标签,Pandas 在创建 DataFrame 时将使用数字行索引
import pandas as pd
# We create a dictionary of Pandas Series without indexes
# 创建一个没有索引的 Pandas Series
data = {'Bob' : pd.Series([245, 25, 55]),
'Alice' : pd.Series([40, 110, 500, 45])}
# 创建一个 DataFrame
df = pd.DataFrame(data)
# 显示 DataFrame
df
输出显示为:
这里:Pandas DataFrame 的行索引从 0 开始,就像 NumPy ndarray 的索引一样。
从 DataFrame 中提取信息
- 和 Pandas Series 一样,我们也可以使用属性从 DataFrame 中提取信息。
- 我们输出 shopping_carts DataFrame 中的一些信息
import pandas as pd
# 创建一个Pandas Series字典
items = {'Bob' : pd.Series(data = [245, 25, 55], index = ['bike', 'pants', 'watch']),
'Alice' : pd.Series(data = [40, 110, 500, 45], index = ['book', 'glasses', 'bike', 'pants'])}
shopping_carts = pd.DataFrame(items)
print('shopping_carts这个DataFrame的形状:', shopping_carts.shape)
print('shopping_carts这个DataFrame的维度:', shopping_carts.ndim)
print('shopping_carts这个DataFrame拥有的元素总数为:', shopping_carts.size, '个')
print()
print('shopping_carts这个DataFrame的数据为:\n', shopping_carts.values)
print()
print('shopping_carts这个DataFrame的行索引为:', shopping_carts.index)
print('shopping_carts这个DataFrame的列索引为:', shopping_carts.columns)
输出:
shopping_carts这个DataFrame的形状: (5, 2)
shopping_carts这个DataFrame的维度: 2
shopping_carts这个DataFrame拥有的元素总数为: 10 个
shopping_carts这个DataFrame的数据为:
[[245. 500.]
[ nan 40.]
[ nan 110.]
[ 25. 45.]
[ 55. nan]]
shopping_carts这个DataFrame的行索引为: Index(['bike', 'book', 'glasses', 'pants', 'watch'], dtype='object')
shopping_carts这个DataFrame的列索引为: Index(['Bob', 'Alice'], dtype='object')
在 Pandas 中,选择特定数据存放于DataFrame中
在这里我们只对某列数据感兴趣, 我们可以通过关键字 columns 和 index 选择要将哪些数据放入 DataFrame 中。
import pandas as pd
# 创建一个Pandas Series字典
items = {'Bob' : pd.Series(data = [245, 25, 55], index = ['bike', 'pants', 'watch']),
'Alice' : pd.Series(data = [40, 110, 500, 45], index = ['book', 'glasses', 'bike', 'pants'])}
bob_shopping_cart = pd.DataFrame(items, columns=['Bob'])
# We display bob_shopping_cart
bob_shopping_cart
输出为:
- 选择特定几行的DataFrame
import pandas as pd
# 创建一个Pandas Series字典
items = {'Bob' : pd.Series(data = [245, 25, 55], index = ['bike', 'pants', 'watch']),
'Alice' : pd.Series(data = [40, 110, 500, 45], index = ['book', 'glasses', 'bike', 'pants'])}
# 创先一个只选择特定几行的DataFrame
sel_shopping_cart = pd.DataFrame(items, index = ['pants', 'book'])
# 展示该 DataFrame
sel_shopping_cart
输出:
- 选择特定某行和某列
import pandas as pd
# 创建一个Pandas Series字典
items = {'Bob' : pd.Series(data = [245, 25, 55], index = ['bike', 'pants', 'watch']),
'Alice' : pd.Series(data = [40, 110, 500, 45], index = ['book', 'glasses', 'bike', 'pants'])}
# 创建只包含Alice列,且索引为glasses, bike的DataFrame
alice_sel_shopping_cart = pd.DataFrame(items, index = ['glasses', 'bike'], columns = ['Alice'])
# 显示该DataFrame
alice_sel_shopping_cart
输出显示为:
使用列表(数组)字典手动地创建 DataFrame
- 注意:字典中的所有列表(数组)长度必须一样
import pandas as pd
# 创建一个数组字典
data = {'Integers' : [1,2,3],
'Floats' : [4.5, 8.2, 9.6]}
# 创建一个DataFrame
df = pd.DataFrame(data)
# 显示
df
输出:
- 我们创建的 data 字典没有标签索引,因此 Pandas 在创建 DataFrame 时自动使用数字行索引。
- 我们可以通过在 pd.DataFrame() 函数中使用关键字 index,为行索引添加标签。
import pandas as pd
data = {'Integers' : [1,2,3],
'Floats' : [4.5, 8.2, 9.6]}
# 创建一个DataFrame并为每行添加行索引
df = pd.DataFrame(data, index = ['label 1', 'label 2', 'label 3'])
# 显示
df
输出显示:
使用 Python 字典列表来手动创建 Pandas DataFrame
import pandas as pd
items2 = [{'bikes': 20, 'pants': 30, 'watches': 35},
{'watches': 10, 'glasses': 50, 'bikes': 15, 'pants':5}]
# 创建一个DataFrame
store_items = pd.DataFrame(items2)
# 显示DataFrame
store_items
输出:
同样:可以通过在 pd.DataFrame() 函数中使用关键字 index,为行索引添加标签
import pandas as pd
# 创建一个字典列表
items2 = [{'bikes': 20, 'pants': 30, 'watches': 35},
{'watches': 10, 'glasses': 50, 'bikes': 15, 'pants':5}]
# 创建一个DataFrame并指定row index
store_items = pd.DataFrame(items2, index = ['store 1', 'store 2'])
# 显示DataFrame
store_items
显示: