将列添加到具有恒定值的数据框


186

我有一个现有的数据框,我需要添加一个额外的列,每行将包含相同的值。

现有的df:

Date, Open, High, Low, Close
01-01-2015, 565, 600, 400, 450

新的df:

Name, Date, Open, High, Low, Close
abc, 01-01-2015, 565, 600, 400, 450

我知道如何追加现有的series / dataframe列。但这是另一种情况,因为我所需要的只是添加“名称”列,并将每一行设置为相同的值,在本例中为“ abc”。

Answers:


293

df['Name']='abc' 将添加新列并将所有行设置为该值:

In [79]:

df
Out[79]:
         Date, Open, High,  Low,  Close
0  01-01-2015,  565,  600,  400,    450
In [80]:

df['Name'] = 'abc'
df
Out[80]:
         Date, Open, High,  Low,  Close Name
0  01-01-2015,  565,  600,  400,    450  abc

34
还有其他方法吗?我收到以下警告。试图在DataFrame的切片副本上设置一个值。尝试改用.loc [row_indexer,col_indexer] = value。查看文档中的注意事项:pandas.pydata.org/pandas-docs/stable/...
毗湿奴viswanath

3
这意味着您要分配的是副本,而不是原始的df,如果不以问题的形式查看数据和代码,我将无法进一步评论。在评论中回答问题会适得其反。这段代码有效,在此之前您已经做了一些事情来引起警告
EdChum

@vishnuviswanath当我使用Jupyter Notebook时,会收到与您完全相同的警告。当我的DataFrame大小不重要(> 200条记录)并且分配了某些组合并且仅打印出df时,它就发生了。
条例草案

4
@vishnuviswanath之前可能已经创建了原始数据帧的一个切片,然后尝试在该切片上设置新列。而是将新列添加到原始数据帧,然后在其后创建切片。可能当您创建数据框的一部分时,pandas不会创建副本,而是以某种方式从原始数据框进行管理。这种混乱与优化有关,因此引起警告。
amit_saxena

2
要解决上述熊猫警告,只需在使用.copy()之前使用获取数据框的副本(除非它很大,或者真正重要的是性能)。
matanster

61

您可以使用insert指定要在何处添加新列。在这种情况下,我通常0将新列放在左侧。

df.insert(0, 'Name', 'abc')

  Name        Date  Open  High  Low  Close
0  abc  01-01-2015   565   600  400    450

这对我不起作用。我的原始矩阵是1460 x 41,我想在前面添加一列1 df.insert(0,'coef_fix',1)。我正在将JupyterLab与Python 3.0配合使用
ColinMac '18

2
对我来说很好。您可能没有意识到该insert操作inplace。这意味着不会返回新数据帧的值,但是原始数据帧已被修改。试试这个df = pd.DataFrame(0, range(1460), range(41)); df.insert(0, 'coef_fix', 1); df
piRSquared

44

单班轮工程

df['Name'] = 'abc'

创建一Name列并将所有行设置为abcvalue


41

总结其他人的建议,并添加第三种方法

您可以:

  • 分配(** kwargs)

    df.assign(Name='abc')
  • 访问新的列系列(将被创建)并进行设置:

    df['Name'] = 'abc'
  • 插入(位置,列,值,allow_duplicates = False)

    df.insert(0, 'Name', 'abc')

    参数loc(0 <= loc <= len(columns))允许您在所需的位置插入列。

    “禄”为您提供了索引你的列将在插入后。例如,上面的代码将Name列插入第0列,即它将插入到第一列之前,成为新的第一列。(索引从0开始)。

所有这些方法都允许您从系列中添加新列(只需将上面的'abc'默认参数替换为系列)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.