向数据框架中添加常值列

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

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

637734 次浏览

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

单尾管工程

df['Name'] = 'abc'

创建一个Name列,并将所有行设置为abc

可以使用< >强insert < / >强指定新列的位置。在本例中,我使用0将新列放置在左侧。

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


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

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

您可以:

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

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

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

One Line帮我搞定了。

df['New Column'] = 'Constant Value'
df['New Column'] = 123

您可以简单地执行以下操作:

df['New Col'] = pd.Series(["abc" for x in range(len(df.index))])

我想让大家更多地关注一下@michele-piccolini的部分回答。

我坚信.assign是这里最好的解决方案。在现实世界中,这些操作不是孤立的,而是在一系列操作中。如果你想支持一个操作链,你可能应该使用.assign方法。

下面是一个使用滑雪胜地降雪数据的例子(但同样的原则也适用于……金融数据)。

这段代码读起来像一个步骤食谱。赋值(使用=)和.insert都使这变得更加困难:

raw = pd.read_csv('https://github.com/mattharrison/datasets/raw/master/data/alta-noaa-1980-2019.csv',
parse_dates=['DATE'])
def clean_alta(df):
return (df
.loc[:, ['STATION', 'NAME', 'LATITUDE', 'LONGITUDE', 'ELEVATION', 'DATE',
'PRCP', 'SNOW', 'SNWD', 'TMAX', 'TMIN', 'TOBS']]
.groupby(pd.Grouper(key='DATE', freq='W'))
.agg({'PRCP': 'sum', 'TMAX': 'max', 'TMIN': 'min', 'SNOW': 'sum', 'SNWD': 'mean'})
.assign(LOCATION='Alta',
T_RANGE=lambda w_df: w_df.TMAX-w_df.TMIN)
)


clean_alta(raw)

注意.assign(LOCATION='Alta', 这一行,它在其余的操作中间创建了一个只有一个值的列。

好吧,我在这里有一个类似的情况,但如果我把这段代码使用:df['Name']='abc' 相反,'abc'是我想从csv文件中的其他地方获取的新列的名称。enter image description here < / p >

从图中可以看到,df还没有被清理,但我想创建2列,名称为“ADI dms rivoli”。每行都是如此,“2019年12月”也是如此。希望你明白了,很难解释,对不起。

这一行就可以了。

Df ['name'] = 'abc'