Pandas DataFrames 的使用

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

显示:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/Tyro_java/article/details/81394608