为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我的 Pandas DataFrame 列也是 Dataframes,而不是 Series?

为什么我的 Pandas DataFrame 列也是 Dataframes,而不是 Series?

慕田峪4524236 2021-10-05 17:44:21
当您将 Pandas DataFrame 列拉出时,它们就是 Pandas 系列但是,在我的情况下,情况并非如此:第一部分(构建 DataFrame 读取 json 抓取)因为它包含业务信息,我无法显示完整代码,但基本上它读取一行数据(存储在系列中)并附加到 DataFrame 的末尾。dfToWrite = pandas.DataFrame(columns=[lsHeader]) # Empty with column headersfor 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'附加问题:如果不是系列(在这种情况下我可以使用tolist()),如何从 Dataframe 列中获取列表?更新 1 从这里开始: Bokeh: AttributeError: 'DataFrame' object has no attribute 'tolist'我发现我需要使用.value.tolist(),但是它仍然没有解释为什么我在拉出一列时得到另一个数据帧,而不是系列。Update 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']],标签=[[4, 7, 5, 6, 1, 8, 3, 0, 2]])我没有看到labels打印 df / 写入 .csv 时的内容,它只是一个普通的 DataFrame。不知道我从哪里得到标签。
查看完整描述

2 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

我认为你有重复的列名,所以如果想要 select Seriesget DataFrame:


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'>

编辑:


这是另一个问题,一个级别MultiIndex,解决方案是将第一级重新分配回列get_level_values:


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'>


查看完整回答
反对 回复 2021-10-05
  • 2 回答
  • 0 关注
  • 295 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信