Python 将新列添加到我的数据帧会插入一个NaN值,而不是所需的值

Python 将新列添加到我的数据帧会插入一个NaN值,而不是所需的值,python,pandas,Python,Pandas,当我尝试添加三个新列时,它们都使用NaN值而不是所需的值进行初始化。但是,如果我在初始化空数据帧之后执行一些逻辑,那么这些值不会被初始化为NaN值 这不起作用 auction = pandas.DataFrame() //These values initialize to NaN auction['Date'] = dataFrame['report_date'].loc[0] auction['Market Location'] = dataFrame[

当我尝试添加三个新列时,它们都使用NaN值而不是所需的值进行初始化。但是,如果我在初始化空数据帧之后执行一些逻辑,那么这些值不会被初始化为NaN值

这不起作用


    auction = pandas.DataFrame()

    //These values initialize to NaN 
    auction['Date'] = dataFrame['report_date'].loc[0]
    auction['Market Location'] = dataFrame['market_location_name'].loc[0]
    auction['State'] = dataFrame['market_location_state'].loc[0]
这很有效


    auction = pandas.DataFrame()

    for i in range(4):
        //logic to initialize a few columns in auction

    //These values initialize to the desired values
    auction['Date'] = dataFrame['report_date'].loc[0]
    auction['Market Location'] = dataFrame['market_location_name'].loc[0]
    auction['State'] = dataFrame['market_location_state'].loc[0]

这没什么大不了的,因为我总是可以使用insert按所需的顺序获取列,但我不明白为什么它不能处理第一块代码。

我想主要是在您称为“不工作”的情况下,问题是dataframe没有索引,只需创建列名即可使用单个值初始化列。在“case that works”中,在执行
auction['Date']=dataframe[…
之前,您的数据帧中已经有索引,在这种情况下,该值被分配给列中的每个元素。举个简单的例子:

# example
dataFrame = pd.DataFrame({'a':list('mn'),
                          'b':range(2)})
print (dataFrame)
   a  b
0  m  0
1  n  1
现在是“有效”的情况

但在“不起作用”的情况下:


对于
//在拍卖中初始化几列的逻辑,您会怎么做?
?我调用一个方法,该方法返回一个包含三列的数据帧,然后将三个新列初始化到拍卖数据帧。是的,看起来是这样的。我只是在该方法的末尾插入。
auction = pd.DataFrame()
#initialize first with an iterable: like a list or a column from another dataframe
auction['c'] = range(2) #or auction['c'] = dataFrame['b']
auction['d'] = dataFrame['a'].loc[0]
print (auction)
   c  d
0  0  m
1  1  m
auction = pd.DataFrame()

auction['d'] = dataFrame['a'].loc[0]
print (auction) #the result is a empty dataframe with column d
# Empty DataFrame
# Columns: [d]
# Index: []

#now add a column from an iterable
auction['c'] = range(2) #or auction['c'] = dataFrame['b']
print (auction) #the column d did not have any value so filled with nan
#      d  c
# 0  NaN  0
# 1  NaN  1