从熊猫数据框中选择单个列(如df.iloc[:, 0]
,df['A']
或df.A
等)时,生成的向量会自动转换为Series而不是单列数据帧。但是,我正在编写一些将DataFrame作为输入参数的函数。因此,我更喜欢处理单列DataFrame而不是Series,以便该函数可以假设可以访问df.columns。现在我必须使用类似pd.DataFrame(df.iloc[:, 0])
的方式将Series明确转换为DataFrame。这似乎不是最干净的方法。有没有更好的方法直接从DataFrame进行索引,以便结果是单列DataFrame而不是Series?Python熊猫:将选定的列保留为DataFrame而不是系列
回答
由于@Jeff提到有几个方法可以做到这一点,但我建议使用LOC/ILOC更明确的(和早期引发错误,如果你尝试一些暧昧):
In [10]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])
In [11]: df
Out[11]:
A B
0 1 2
1 3 4
In [12]: df[['A']]
In [13]: df[[0]]
In [14]: df.loc[:, ['A']]
In [15]: df.iloc[:, [0]]
Out[12-15]: # they all return the same thing:
A
0 1
1 3
后两个在整数列名称的情况下选择删除歧义(正是为什么创建loc/iloc)。例如:
In [16]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 0])
In [17]: df
Out[17]:
A 0
0 1 2
1 3 4
In [18]: df[[0]] # ambiguous
Out[18]:
A
0 1
1 3
抱歉打扰你,但这只是一个非常快速的问题。我看到额外的'[]'如何使结果成为'DataFrame'而不是'Series',但pandas文档中的这种索引语法是在哪里讨论的?我只是想获得这种索引技术的“官方”名称,以便我真正理解它。谢谢! –
@sparc_spread http://pandas.pydata.org/pandas-docs/stable/indexing.html#basics“您可以将列的列表传递给[]以按照该顺序选择列。”我不确定这是否有名字! –
是的,它看起来没有 - 但我会从现在开始继续使用它。令人惊讶的是API和文档都埋藏了多少东西。谢谢! –
- 1. python,如何将熊猫系列转换为熊猫DataFrame?
- 2. 熊猫合并保留列名的重复DataFrame列
- 3. 熊猫DataFrame reset_index列?
- 4. Python熊猫。使用Series创建DataFrame不会保留dtype
- 5. 为熊猫DataFrame中的每列指定数据类型 - Python
- 6. Python:阵列(矩阵)到熊猫DataFrame
- 7. 熊猫DataFrame - 将系列字符串分成多列
- 8. 熊猫格式 - 如何将DataFrame float64列(与NaNs)保存为int?
- 9. 熊猫DataFrame列表奇怪的行为
- 10. 将熊猫系列添加到数据框中,保留索引
- 11. 熊猫DataFrame列连接
- 12. 熊猫dataframe groupby两列
- 13. 转换列表熊猫DataFrame
- 14. 熊猫Dataframe列值拆分
- 15. 熊猫DataFrame移调多列
- 16. 将列表的列表转换为熊猫DataFrame
- 17. 熊猫Dataframe - RemoteDataError - Python
- 18. 熊猫dataframe删除恒定列
- 19. 从熊猫系列选择特定值
- 20. 保留列顺序 - Python熊猫和列Concat
- 21. 熊猫:系列为String
- 22. 强制熊猫保留多列同名
- 23. 作为字符串导入熊猫dataframe列不是int
- 24. 不要将HTML处理为Markdown,而是保留定义列表
- 25. 熊猫DataFrame拼接结果成为系列
- 26. 将熊猫数据框行映射为熊猫系列
- 27. 熊猫:在选定列
- 28. 在熊猫系列
- 29. Python的大熊猫 - GROUPBY和均值,但保留列名
- 30. Python熊猫,创建空DataFrame指定列dtypes
df.iloc [:,[0]]或df [['A']]; df.A只会回馈一系列 – Jeff