向DataFrame Python添加新列。 SettingWithCopyWarning

时间:2015-08-17 08:26:47

标签: python pandas

我正在尝试向数据框添加新列。我有一列日期,我将它转换为秒 - 自 - 纪元,并将其添加到数据框的新列

def addEpochTime(df):
    df[7] = np.NaN                         # Adding empty column. 
    for n in range(0, len(df)):            # Writing to empty column. 
        df[7][n] = df[0][n]  - 5           # Conduct some mathematical mutations...

addEpochTime(df)

我上面写的内容有效,但我收到错误,即:SettingWithCopyWarning

我的问题是,如何在数据框中添加新列并向其写入数据

尽管已经在pandas文档中阅读了数据框,但我并不完全理解数据框的索引方式。

2 个答案:

答案 0 :(得分:1)

因为你说 -

  

我有一列日期,我将其转换为秒 - 自 - 纪元并将其添加到数据框的新列

如果你实际做的事情很简单 - df[7][n] = df[0][n] -5,那么你可以简单地使用series.apply方法做同样的事情,在你的情况下 -

def addEpochTime(df):
    df[7] = df[0].apply(lambda x: x-5)

.apply方法接受一个函数作为参数,它传递每一行的值,它应该在应用逻辑后返回值。

您还可以传入一个接受日期作为参数的函数,并将自纪元以来的秒数返回.apply(),这可能就是您要查找的内容。

示例 -

In [4]: df = pd.DataFrame([[1,2],[3,4]],columns=['A','B'])

In [5]: df
Out[5]:
   A  B
0  1  2
1  3  4

In [6]: df['C'] = df['A'].apply(lambda x: x-5)

In [7]: df
Out[7]:
   A  B  C
0  1  2 -4
1  3  4 -2

答案 1 :(得分:0)

您可以在一行中执行此操作并避免警告:

df
>>    a
   0  1
   1  2

df['b'] = df['a'] - 5
df
>>   a  b
  0  1 -4
  1  2 -3