pandas系列和单列DataFrame有什么区别?

sar*_*ele 148 python pandas

为什么pandas会区分a Series和单列DataFrame
换句话说:Series班级存在的原因是什么?

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

Pyt*_*Nut 169

引用熊猫文档

大熊猫.DataFrame(data = None,index = None,columns = None,dtype = None,copy = False)

具有标记轴(行和列)的二维大小可变,可能异构的表格数据结构.算术运算在行标签和列标签上对齐. 可以被认为是Series对象的类似dict的容器.主要的pandas数据结构

(强调我的,句子片段不是我的)

因此,系列是a的单列的数据结构pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False),不仅在概念上,而且在字面上,即a中的数据DataFrame实际上作为集合存储在内存中DataFrame.

类似地:我们需要列表和矩阵,因为矩阵是用列表构建的.单行matricies虽然相当于功能中的列表,但如果没有它们组成的列表,它们仍然不存在.

它们都具有非常相似的API,但您会发现这些Series方法始终满足您拥有多个列的可能性.当然,你总是可以在a中添加另一个DataFrame(或等效对象)Series,而DataFrame在另一个中添加另一个则Series需要创建一个Series.

  • 您无法从"可以被认为是Series对象的类似dict的容器"中得出关于`DataFrame`的实际内部数据结构的任何内容.实际上,它目前存储为`BlockManager`(这是一个你不应该依赖的实现细节). (6认同)
  • 那么,为什么人们会使用系列而不是数据框呢? (4认同)
  • 感谢您的回答.我的问题的灵感来自我的代码中的一个错误,当数据框架上的选择突然返回一个系列时,我无法访问columns属性.我不是唯一困惑的人:http://stackoverflow.com/questions/16782323/python-pandas-keep-selected-column-as-dataframe-instead-of-series?lq = 1 (2认同)
  • 我可能是个书呆子,但我看不出OP的WHY系列问题是否已得到回答。我看到一个描述序列和数据帧之间关系的答案,但是没有看到解释为什么我们要把序列作为单独的数据类型而不是数据帧的特殊情况(即只有一列的情况)的答案。 (2认同)
  • IMO,这认为 Series 是一个有漏洞的抽象,并认为 Series 不应该暴露给用户。相反,一列 DataFrame 会更有用。 (2认同)
  • 我同意 pd.Series 不应该存在:拥有它是没有意义的。它在用户级别的存在可能会导致很难检测到的错误。比较 dataframe.loc[:, col_name] 和 col_name 为字符串时 data_frame.loc[:, [col_name]] 返回的数据类型:第一个是 Series,第二个是 DataFrame。当 col_name 是作为输入或计算结果接收的参数时,它会迫使您进行无数次测试。 (2认同)

Ume*_*hik 14

来自pandas doc http://pandas.pydata.org/pandas-docs/stable/dsintro.html Series是一个一维标记的数组,能够保存任何数据类型.以熊猫系列形式阅读数据:

import pandas as pd
ds = pd.Series(data, index=index)
Run Code Online (Sandbox Code Playgroud)

DataFrame是一个二维标记数据结构,具有可能不同类型的列.

import pandas as pd
df = pd.DataFrame(data, index=index)
Run Code Online (Sandbox Code Playgroud)

在上面的两个索引都是列表

例如:我有一个包含以下数据的csv文件:

,country,popuplation,area,capital
BR,Brazil,10210,12015,Brasile
RU,Russia,1025,457,Moscow
IN,India,10458,457787,New Delhi
Run Code Online (Sandbox Code Playgroud)

要将上述数据作为系列和数据框读取:

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)
Run Code Online (Sandbox Code Playgroud)

输出:

>>> d
BR           Brazil
RU           Russia
IN            India

df = pd.DataFrame(file_data.area, index=['BR','RU','IN'] or index = file_data.index )
Run Code Online (Sandbox Code Playgroud)

输出:

>>> df
      area
BR   12015
RU     457
IN  457787
Run Code Online (Sandbox Code Playgroud)

  • 我没有投反对票,但你的代码不起作用。您可能希望将 `file_data` 更改为 `brics`,将 US 行添加到 csv,并将 `['BR'....'US']` 更改为 `brics.index`。也许正确的“化蛹”。 (2认同)