pandas 如何正确分配嵌套的DataFrame?

ryoqjall  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(78)

我需要将一个DataFrame作为值赋给另一个DataFrame中的单元格。我尝试了三种不同的方法:

import pandas

data = { 'A': [ 1 ] }
frame = pandas.DataFrame(data)

frame['B'] = None

frame.loc[0]['B'] = pandas.DataFrame()
print(frame)

frame.loc[0, 'B'] = pandas.DataFrame()
print(frame)

frame['B'][0] = pandas.DataFrame()
print(frame)

第一个输出一个警告并不赋值,第二个将单元格值设置为nan,第三个输出一个警告并正确赋值。这些行为对我来说都没有意义,第一个是因为loc应该创建一个视图,第二个是因为出现了一个wild nan,第三个是因为尽管有警告,但赋值还是通过了。如果我用一个非pandas对象替换DataFrame,那么在第二种情况下也会进行赋值,这让我认为这是pandas中的某种特殊情况。有没有人能解释一下这里发生了什么,并告诉是否有一种方法可以在没有警告和沉默的情况下完成任务?

yx2lnoni

yx2lnoni1#

Pandas的设计并不是为了使用列表/ Dataframe 作为“单元格”中的对象,因此大多数赋值都不能很好地使用它们。
当你使用loc和一个右边大小的列表或DataFrame时,pandas试图将赋值解释为要扩展到几个单元格的东西,这在你的情况下是失败的。
一个选项是使用at

frame.at[0, 'B'] = pandas.DataFrame()
hivapdat

hivapdat2#

看起来pandas对其中几个操作进行了特殊处理。第三个是最有趣的。在第三种情况下,Pandas会警告您在副本上设置数据-所以要显式地设置该副本。你会有复制B的开销,但这只是一个小成本

import pandas

data = { 'A': [ 1 ] }
frame = pandas.DataFrame(data)
frame['B'] = None

B = frame['B'].copy()
B[0] = pandas.DataFrame()
frame['B'] = B
print(frame)

输出

A                                      B
0  1  Empty DataFrame
Columns: []
Index: []

相关问题