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

2024-05-19 16:26:14 发布

您现在位置:Python中文网/ 问答频道 /正文

结束时更新结束时更新2

我从这里读到: get list from pandas dataframe column

Pandas DataFrame columns are Pandas Series when you pull them out

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

json(读取第一个框架的数据) 因为它包含业务信息,我不能显示完整的代码,但基本上它读取一行数据(存储在序列中)并在数据帧的末尾追加。在

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)

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

^{pr2}$

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

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

Python控制台显示:

class 'pandas.core.frame.DataFrame'

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

更新1 从这里开始: Bokeh: AttributeError: 'DataFrame' object has no attribute 'tolist'

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

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

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,这只是一个普通的数据帧。不知道我从哪儿弄来的标签。在


Tags: columns数据dataframepandasraw情况column序列
2条回答

pandas.core.frame.DataFrame的每个实例基本上都是一个数组,因此如果您要获取这种类型,那么您可以通过调用df.columns来获得每一列(如果列是一维的,则是pandas.core.series.Series)的类型。在

df.columns将为您提供一个iterable对象,您可以通过该对象循环获取每行的值。在

您可能还希望查看pandas.read_json或其他类似的包,以便将json直接放入一个更易于管理的pandas对象中

我想您有重复的列名,所以如果想要选择Series获取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,解决方案是将第一个级别重新分配回具有^{}的列:

^{pr2}$

相关问题 更多 >