我只是问自己:我理解调用df[column_name]显示一个系列,因为DataFrame是由不同的数组构建的。但是,为什么调用df[[column_name]] (column_name只有一列)返回DataFrame而不是Series ?我不确定理解熊猫在这里建造背后的逻辑
谢谢:)
我试图向我的学生解释为什么调用一个元素的列表显示一个数据框而不是一个系列,但没有管理
如果通过列表选择DataFrame
的列,则通过嵌套列表(double[[]])的子集获取DataFrame
df = pd.DataFrame(columns=['col1','col3', 'col2'], index=[0,5])
df1 = df[['col1','col2']]
print (df1)
col1 col2
0 NaN NaN
5 NaN NaN
如果传递一个元素列表,则得到单列DataFrame
。
df2 = df[['col1']]
print (df2)
col1
0 NaN
5 NaN
For Series是必需的,只在一组方括号内传递单个列名,它显然返回Series。
s = df['col1']
print (s)
0 NaN
5 NaN
Name: col1, dtype: object
但如果重复列名而不是Series
得到DataFrame:
df = pd.DataFrame(columns=['col1','col1', 'col2'], index=[0,5])
df3 = df['col1']
print (df3)
col1 col1
0 NaN NaN
3 NaN NaN
这可能发生,因为当您将单个column_name作为字符串时,它会执行选择并根据搜索键column_name返回单个值。但是,当您提供包含在列表中的相同column_name时,它会尝试获取列表的所有键在这种情况下。因此产生一个数据帧。
我猜他们正在使用一些标准逻辑来返回数据帧,如果提供列表,无论列表的长度。
import pandas as pd
df = pd.DataFrame(列=["a","b","c"],data =[[1、4、7],[2、5、8],[3、6、9]])
column_name = "a">
打印(类型(df (column_name)))
打印(类型(df [[column_name]]))
输出:& lt;类"pandas.core.series.Series"比;& lt;类pandas.core.frame.DataFrame的祝辞