当前位置: 首页 > 知识库问答 >
问题:

为什么我的熊猫数据框列也是数据框,而不是系列?

商振
2023-03-14

结束时更新更新2结束时更新

我从这里读到:从dataframe列获取列表

熊猫数据框列在拉出时是熊猫系列

然而,我的情况并非如此:

第一部分(建立DataFrame读取json刮擦)因为它包含业务信息,我不能显示完整的代码,但基本上它读取一行数据(存储在系列中),并在DataFrame的末尾追加。

dfToWrite = pandas.DataFrame(columns=[lsHeader]) # Empty with column headers
for row in jsAdtoolJSON['rows']:
    lsRow = []
    for col in row['row']:
        lsRow.append((col['primary'])['value'])
    dfRow = pandas.Series(lsRow, index = dfToWrite.columns)
dfToWrite = dfToWrite.append(dfRow, ignore_index = True)

下一部分(检查类型):(请忽略函数的功能)

def CalcMA(df: pandas.DataFrame, target: str, period: int, maname: str):
    print(type(df[target]))

最后调用函数:(“Raw_Impressions”是一个列标题)

CalcMA(dfToWrite, "Raw_Impressions", 5, "ImpMA5")

Python控制台显示:

pandas.core.frame.数据帧

附加问题:如果数据帧列不是系列,如何从中获取列表(在这种情况下,我可以使用tolist())?

从此处更新1:Bokeh:AttributeError:“DataFrame”对象没有属性“tolist”

我发现我需要使用.value.tolist(),但是它仍然不能解释为什么当我拉出一列时,我会得到另一个Dataframe,而不是Series。

更新2发现df有多索引,非常惊讶:

MultiIndex(级别=[COST_/CPM,CTR,ECPM/_ROI,Goal_Ratio,Hour_of_the_Day,IMP。/Joins'、'Raw_Clicks_/_Unique_Clicks'、'Raw_Impressions'、'Unique_Goal_/_UniqueGoal_Forecasted_Value']]],标签=[[4, 7, 5, 6, 1, 8, 3, 0, 2]])

当打印df/写入到. csv时,我看不到标签,这只是一个普通的DataFrame。不知道我从哪里得到的标签

共有2个答案

陆俊捷
2023-03-14

熊猫的每个实例。果心框架DataFrame基本上是一个数组,因此,如果要获取这种类型的数据,则可以通过调用df来获取每一列(如果该列是一维的,则其类型将为pandas.core.series.series)。列

df。列将为您提供一个iterable对象,您可以通过它循环获得每行的值。

您可能还想看看熊猫。阅读_json或其他类似的包,只需将json直接放入一个可能更容易管理的pandas对象中即可

洪鸿
2023-03-14

我认为您有重复的列名称,因此如果想要选择SeriesgetDataFrame

df = pd.DataFrame([[1,2],[4,5], [7,8]], index=list('aab')).T
print (df)
   a  a  b
0  1  4  7
1  2  5  8

print (df['a'])
   a  a
0  1  4
1  2  5

print (type(df['a']))
<class 'pandas.core.frame.DataFrame'>

print (df['b'])
0    7
1    8
Name: b, dtype: int64

print (type(df['b']))
<class 'pandas.core.series.Series'>

编辑:

这是另一个问题,一级多索引,解决方案是将第一级重新分配回具有get\u level\u值的列:

mux = pd.MultiIndex([['COST_/CPM', 'CTR', 'ECPM/_ROI', 'Goal_Ratio', 'Hour_of_the_Day', 
                      'IMP./Joins',  'Raw_Clicks_/_Unique_Clicks', 'Raw_Impressions',
                      'Unique_Goal_/_UniqueGoal_Forecasted_Value']], 
labels=[[4, 7, 5, 6, 1, 8, 3, 0, 2]])

df = pd.DataFrame([range(9)], columns=mux)
print (type(df['CTR']))
<class 'pandas.core.frame.DataFrame'>

df.columns = df.columns.get_level_values(0)
print (type(df['CTR']))
<class 'pandas.core.series.Series'>

 类似资料:
  • 问题内容: 我正在寻找一种方法来反向旋转数据框。据我所知,pandas提供了一种pivot或pivot_table方法将EAV df转换为“普通”方法。但是,还有一种方法可以做逆运算吗? 所以给定数据框: 我想将其转换为(EAV模型): 这样做最有效的方法是什么? 问题答案: 假设是索引,将执行以下操作: 如果不是索引,请像这样设置:

  • 问题内容: 当从父数据帧中选择子数据帧时,我注意到有些程序员使用该方法复制数据帧。例如, …而不只是 他们为什么要复制数据框?如果我不复制怎么办? 问题答案: 这扩展了保罗的答案。在Pandas中,为DataFrame编制索引将返回对初始DataFrame的引用。因此,更改子集将更改初始DataFrame。因此,如果要确保不更改初始DataFrame,则需要使用该副本。考虑以下代码: 你会得到:

  • 问题内容: 我对熊猫有些陌生。我有一个熊猫数据框,它是1行乘23列。 我想将其转换为系列吗?我想知道最pythonic的方法是什么? 我试过了,但是抱怨。它不够聪明,无法意识到它仍然是数学上的“向量”。 谢谢! 问题答案: 它不够聪明,无法意识到它仍然是数学上的“向量”。 可以说它足够聪明,可以识别尺寸差异。:-) 我认为您可以做的最简单的事情是使用位置选择该行,这将为您提供一个Series,其列

  • 我想使用两列作为行ID,同时计算基于时间的分组。请看下图: 转化成这样: 正在发生的是,X在时间10发生了0次,但在15和23发生了1次。 Y在10点钟发生了3次,但在15和23没有。等等。

  • 问题内容: 我有两个看起来像这样的数据框: 现在,如果我利用pandas .isin函数,我可以做一些漂亮的事情 列和from存在于while中不 我的问题是:是否有人知道为df_2中但不存在于df_1中的列返回列标签的方法 像这样的东西 先感谢您! 问题答案: 熊猫索引对象具有类似集合的属性,因此您可以直接执行以下操作: 您还可以使用运算符来计算交集,并集和对称差: 过去存在差异的运算符,现已弃

  • 问题内容: 这可能很容易,但是我有以下数据: 在数据框1中: 在数据框2中: 我想要一个具有以下形式的数据框: 我尝试使用该方法,但是得到了交叉连接(即笛卡尔积)。 什么是正确的方法? 问题答案: 通常看来,您只是在寻找联接: