如何为空Pandas DataFrame添加列且保持df.empty为True?
解决方案:给空DataFrame添加新列且保持为空
没问题,我懂你遇到的这个小麻烦——空DataFrame因为没有索引,常规赋值方法容易报错,改列名的操作要么不符合预期要么看似不生效。下面给你几个靠谱的解决办法:
方法1:直接构造新的空DataFrame(最简单)
既然原DataFrame本来就是空的,直接指定包含'a'和'b'的列名列表创建df2就好,一步到位:
import pandas as pd df = pd.DataFrame(columns=['a']) df2 = pd.DataFrame(columns=['a', 'b'])
验证一下:df2.empty会返回True,列也正好是你需要的['a', 'b']。
方法2:用reindex基于原DataFrame添加列
如果不想重新创建,要在原df基础上修改,reindex是安全的选择,它会帮你添加新列同时保持DataFrame为空:
df = df.reindex(columns=df.columns.tolist() + ['b'])
执行后,df的列变成['a', 'b'],df.empty依然为True。
方法3:用assign方法添加空列
assign可以优雅地添加新列,只要给它一个空的Series(注意指定dtype避免默认值问题):
df = df.assign(b=pd.Series(dtype='object'))
操作后新列'b'被添加,整个DataFrame还是空的,df.empty为True。
为啥你之前的方法不行?
df.columns=df.columns+'b':这个操作是把每个列名字符串都拼接上'b',所以'a'直接变成了'ab',自然不是你要的结果。df.loc[:,'b']=None:空DataFrame没有定义索引(行标签),Pandas不知道该把标量值放到哪一行,所以抛出了那个错误。- 至于
df.columns=df.columns.tolist()+['b'],其实这个方法本身是有效的(我测试过),可能你操作时没注意重新赋值?比如直接执行df.columns = ['a', 'b']也是可行的哦。
内容的提问来源于stack exchange,提问作者00__00__00
相关产品推荐
相关产品推荐

