为什么pandas要区分Series和单列DataFrame? 换句话说,级数类存在的理由是什么?

我主要使用带datetime索引的时间序列,这可能有助于设置上下文。


当前回答

数据帧通常被描述为

具有可能不同类型列的2维标记数据结构。你可以把它想象成一个电子表格或SQL表

由于这个定义,我们可以将数据视为单元格,就像在Excel电子表格中一样,它具有带行号的行和带列标题的列。由于这种简单的观点,底层的数据结构可能有点令人惊讶。

DataFrame实际上由用于轴标签(行标签和列标签)的Index对象和用于列数据的Series对象组成。

Series对象通过行标签和列标签为每个列数据(保存在一维的numpy.ndarray中)提供封装。

因此单个列DataFrame将有一个用于列数据的底层Series对象。

有关底层数据结构的可视化表示的简单示例,请参阅DataFrame数据结构。

其他回答

Series是一个一维标记数组,能够保存任何数据类型(整数、字符串、浮点数、Python对象等)。轴标签统称为索引。创建一个Series的基本方法是调用:

s = pd.Series(data, index=index)

DataFrame是一个2维标记数据结构,其列类型可能不同。您可以把它想象成一个电子表格或SQL表,或一个系列对象字典。

 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)

数据帧通常被描述为

具有可能不同类型列的2维标记数据结构。你可以把它想象成一个电子表格或SQL表

由于这个定义,我们可以将数据视为单元格,就像在Excel电子表格中一样,它具有带行号的行和带列标题的列。由于这种简单的观点,底层的数据结构可能有点令人惊讶。

DataFrame实际上由用于轴标签(行标签和列标签)的Index对象和用于列数据的Series对象组成。

Series对象通过行标签和列标签为每个列数据(保存在一维的numpy.ndarray中)提供封装。

因此单个列DataFrame将有一个用于列数据的底层Series对象。

有关底层数据结构的可视化表示的简单示例,请参阅DataFrame数据结构。

引用熊猫的文件

熊猫。DataFrame(data=None, index=None, columns=None, dtype=None, copy=False) 二维大小可变,具有标记轴(行和列)的潜在异构表格数据结构。算术运算在行标签和列标签上对齐。可以看作是系列对象的字典式容器。主要pandas数据结构。

因此,Series是DataFrame中单个列的数据结构,不仅是概念上的,而且是字面上的,即DataFrame中的数据实际上作为Series的集合存储在内存中。

类似地:我们既需要列表也需要矩阵,因为矩阵是用列表构建的。单行矩阵虽然在功能上等同于列表,但如果没有它们所组成的列表,则不可能存在。

它们都有极其相似的api,但是您会发现DataFrame方法总是满足您有多个列的可能性。当然,您总是可以向一个DataFrame添加另一个Series(或等效对象),而将一个Series添加到另一个Series则需要创建一个DataFrame。

导入车辆数据

import pandas as pd

cars = pd.read_csv('cars.csv', index_col = 0)

下面是cars.csv文件的外观。

打印drives_right列为Series:

print(cars.loc[:,"drives_right"])

    US      True
    AUS    False
    JAP    False
    IN     False
    RU      True
    MOR     True
    EG      True
    Name: drives_right, dtype: bool

单括号版本提供Pandas系列,双括号版本提供Pandas数据框架。

打印drives_right列作为DataFrame

print(cars.loc[:,["drives_right"]])

         drives_right
    US           True
    AUS         False
    JAP         False
    IN          False
    RU           True
    MOR          True
    EG           True

将一个系列添加到另一个系列将创建一个数据帧。

来自熊猫医生http://pandas.pydata.org/pandas-docs/stable/dsintro.html Series是能够容纳任何数据类型的一维标记数组。 以熊猫系列的形式读取数据:

import pandas as pd
ds = pd.Series(data, index=index)

DataFrame是一个2维标记数据结构,其列类型可能不同。

import pandas as pd
df = pd.DataFrame(data, index=index)

在上述两个索引都是列表

我有一个csv文件,其中包含以下数据:

,country,popuplation,area,capital
BR,Brazil,10210,12015,Brasile
RU,Russia,1025,457,Moscow
IN,India,10458,457787,New Delhi

将上述数据读取为序列和数据帧:

import pandas as pd
file_data = pd.read_csv("file_path", index_col=0)
d = pd.Series(file_data.country, index=['BR','RU','IN'] or index =  file_data.index)

输出:

>>> d
BR           Brazil
RU           Russia
IN            India

df = pd.DataFrame(file_data.area, index=['BR','RU','IN'] or index = file_data.index )

输出:

>>> df
      area
BR   12015
RU     457
IN  457787