pandas 为什么使用df[[column_name]]会显示DataFrame?

8zzbczxx  于 2023-04-04  发布在  其他
关注(0)|答案(2)|浏览(189)

我只是在问自己我知道调用df[column_name]会显示一个Series,因为DataFrame是由不同的数组构建的。但是,为什么调用dfcolumn_name(column_name只有一个列)会返回DataFrame而不是Series?我不确定是否理解Pandas是如何构建的逻辑
谢谢:)
我试图向我的学生解释为什么调用一个元素的列表会显示一个dataframe而不是一个Series,但没有管理

v8wbuo2f

v8wbuo2f1#

如果通过列表选择DataFrame的列,则通过嵌套列表的子集获取DataFrame(double )。

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

对于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
falq053o

falq053o2#

这可能是因为当你给予单个column_name作为字符串时,它会根据搜索关键字column_name执行选择并返回单个值。但是当你提供包含在列表中的相同column_name时,它会试图获取列表中的所有关键字,在这种情况下,它是一个。因此导致了一个 Dataframe 。
我猜他们使用一些标准逻辑来返回dataframe,如果提供了列表,而不管列表的长度。
进口Pandas当PD
df = pd.DataFrame(columns=[“a”,“B”,“c”],data=[[1,4,7],[2,5,8],[3,6,9]])
column_name =“a”
print(type(df[column_name]))
print(type(dfcolumn_name))
output:〈class 'pandas.core.series. Series'〉〈class 'pandas.core.frame. DataFrame'〉

相关问题