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

现有的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

我知道如何附加现有的系列/数据帧列。但这是一个不同的情况,因为我所需要的是添加'Name'列,并将每一行设置为相同的值,在本例中为'abc'。


当前回答

append方法自Pandas 1.4.0以来已弃用

因此,只有在使用实际的pandas DataFrame对象时才使用上述方法:

df["column"] = "value"

或者,如果在DataFrame副本的视图上设置值,请使用concat()或assign():

通过这种方式,新创建的Series具有与原始DataFrame相同的索引,因此将匹配精确的行

# adds a new column in view `where_there_is_one` named 
# `client` with value `display_name`
# `df` remains unchanged
df = pd.DataFrame({"number": ([1]*5 + [0]*5 )})

where_there_is_one = df[ df["number"] == 1]
where_there_is_one = pd.concat([
    where_there_is_one,
    pd.Series(["display_name"]*df.shape[0],
              index=df.index, 
              name="client")
   ], 
join="inner", axis=1)


# Or use assign
where_there_is_one = where_there_is_one.assign(client = "display_name")

输出:

where_there_is_one:                df:
| 0   | number | client       |    | 0 | number |
| --- | ---    | ---          |    |---| -------|
| 0   | 1      | display_name |    | 0 | 1      |
| 1   | 1      | display_name |    | 1 | 1      |
| 2   | 1      | display_name |    | 2 | 1      |
| 3   | 1      | display_name |    | 3 | 1      |
| 4   | 1      | display_name |    | 4 | 1      |
                                   | 5 | 0      |
                                   | 6 | 0      |
                                   | 7 | 0      |
                                   | 8 | 0      |
                                   | 9 | 0      |

其他回答

您可以使用insert来指定新列的位置。在本例中,我使用0将新列放在左边。

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

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

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

您可以:

分配(* * kwargs): df.assign (Name = ' abc ') 访问新的列系列(它将被创建)并设置它: df['Name'] = 'abc' insert(loc, column, value, allow_duplates =False) df。insert(0, 'Name', 'abc')

其中参数loc (0 <= loc <= len(columns))允许您在想要的位置插入列。

'loc'给出了你的列在插入后的索引。例如,上面的代码将列Name插入为第0列,即它将插入到第一列之前,成为新的第一列。(索引从0开始)。

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

append方法自Pandas 1.4.0以来已弃用

因此,只有在使用实际的pandas DataFrame对象时才使用上述方法:

df["column"] = "value"

或者,如果在DataFrame副本的视图上设置值,请使用concat()或assign():

通过这种方式,新创建的Series具有与原始DataFrame相同的索引,因此将匹配精确的行

# adds a new column in view `where_there_is_one` named 
# `client` with value `display_name`
# `df` remains unchanged
df = pd.DataFrame({"number": ([1]*5 + [0]*5 )})

where_there_is_one = df[ df["number"] == 1]
where_there_is_one = pd.concat([
    where_there_is_one,
    pd.Series(["display_name"]*df.shape[0],
              index=df.index, 
              name="client")
   ], 
join="inner", axis=1)


# Or use assign
where_there_is_one = where_there_is_one.assign(client = "display_name")

输出:

where_there_is_one:                df:
| 0   | number | client       |    | 0 | number |
| --- | ---    | ---          |    |---| -------|
| 0   | 1      | display_name |    | 0 | 1      |
| 1   | 1      | display_name |    | 1 | 1      |
| 2   | 1      | display_name |    | 2 | 1      |
| 3   | 1      | display_name |    | 3 | 1      |
| 4   | 1      | display_name |    | 4 | 1      |
                                   | 5 | 0      |
                                   | 6 | 0      |
                                   | 7 | 0      |
                                   | 8 | 0      |
                                   | 9 | 0      |

这一行就可以了。

df['name'] = 'abc'

单尾管工程

df['Name'] = 'abc'

创建“名称”列,并将所有行设置为abc值