pandas DataFrame的本质

Dro*_*ror 6 python pandas

作为我对列中混合类型的问题的后续跟进:

我可以将a DataFrame视为列列表还是行列表?

在前一种情况下,这意味着(最佳地)每列必须是同质的(类型),并且不同的列可以是不同类型的.后一种情况表明,每一行都是类型均匀的.

对于文档:

DataFrame是一个二维标记数据结构,具有可能不同类型的列.

这意味着DataFrame是列的列表.

是否意味着向a追加一行DataFrame比追加一列更昂贵?

jor*_*ris 6

您完全正确的是,DataFrame可以被视为列列表,甚至更多(有序)列的字典(请参阅此处的说明).

实际上,每列必须是同类的,不同的列可以是不同的类型.但是通过使用objectdtype,您仍然可以在一列中保存不同类型的对象(尽管不建议分开用于例如字符串).
为了说明,如果您询问DataFrame的数据类型,则会获得每列的dtype:

In [2]: df = pd.DataFrame({'int_col':[0,1,2], 'float_col':[0.0,1.1,2.5], 'bool_col':[True, False, True]})

In [3]: df.dtypes
Out[3]:
bool_col        bool
float_col    float64
int_col        int64
dtype: object
Run Code Online (Sandbox Code Playgroud)

在内部,值存储为相同类型的块.每列或相同类型的列集合都存储在单独的数组中.

这确实意味着追加一行更加昂贵.通常,附加多个单行并不是一个好主意:更好的是例如预先分配一个空数据帧来填充,或者将新行/列放在一个列表中并立即将它们连接起来.
请参阅concat/append docs末尾的注释(就在第一小节"在其他轴上设置逻辑"之前).