结尾更新 结尾更新2
我从这里阅读到: 从 Pandas 数据帧列中获取列表
Pandas DataFrame 列在提取时是 Pandas Series
然而,在我的情况下,这不是真的:
第一部分(构建读取 json 爬取的 DataFrame) 由于它包含商业信息,我无法显示完整代码,但基本上它读取一行数据(存储在 Series 中)并将其附加到 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.DataFrame'
附加问题:如果Dataframe列不是Series(在这种情况下,我可以使用tolist()
),如何从中获取列表?
更新1 从这里: Bokeh: AttributeError: 'DataFrame' object has no attribute 'tolist'
我发现我需要使用.value.tolist()
,然而这仍然不能解释为什么当我取出一列时我得到另一个Dataframe而不是Series。
更新2 我发现df有MultiIndex,非常惊讶:
MultiIndex(levels=[['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 /写入.csv时看不到labels
,它只是一个普通的DataFrame。不确定我从哪里得到了这些标签。
levels
没有重复项)这非常奇怪,因为当我print(df)
时,它不显示任何标签。我将在问题中更新标签。 - Nicholas Humphrey