Press "Enter" to skip to content

Pandas如何新增或者修改数据列

我们在进行数据分析时,经常需要按照一定的条件创建新的数据列,然后进一步进行数据分析,在pandas里面新增数据列的方法有如下:

  1. 直接赋值
  2. df.apply方法
  3. df.assign方法
  4. 按条件选择分组分别赋值

首先读取一份数据:

import pandas as pd
pd.set_option('display.unicode.ambiguous_as_wide', True)  #处理数据的列标题与数据无法对齐的情况
pd.set_option('display.unicode.east_asian_width', True)   #无法对齐主要是因为列标题是中文

df=pd.read_csv(r'data\sh600000.csv',encoding='gbk')
df.set_index('交易日期',inplace=True) #设置索引为日期,方便按日期筛选
df.index

print(df.head(10))

1、直接赋值,(假如:我需要新增一列为最高价与最低价的利润差,代码可以这样写)

df.loc[:,'利润差']=df['最高价']-df['最低价']
print(df.head(10))

这样就实现了新增数据列

2、df.apply方法,(假如:我有这样一个需求,新增1列,我需要对2019年1月~4月份“最高价”和“最低价”做一个判断,如果最高价大于13则返回“高位”,如果最低价低于10则返回“低位”,否则就返回“正常”),这个时候就可以使用df.apply方法,代码如下:

import pandas as pd
pd.set_option('display.unicode.ambiguous_as_wide', True)  #处理数据的列标题与数据无法对齐的情况
pd.set_option('display.unicode.east_asian_width', True)   #无法对齐主要是因为列标题是中文

df=pd.read_csv(r'data\sh600000.csv',encoding='gbk')
df.set_index('交易日期',inplace=True) #设置索引为日期,方便按日期筛选
df.index

def add(x):
    if x['最高价']>13:
        return '高位'
    elif x['最低价']<10:
        return '低位'
    else:
        return '正常'

df.loc[:,'判断']=df.apply(add, axis=1)
year=df.loc['2019-1-2':'2019-4-4',:]

print(year.head(30))

3、df.assign方法,可以头同时增加多个新的列,(例如我要新增2列,一列为利润差,另外一列为时间),代码如下:

add=df.assign(利润差=df['最高价']-df['最低价'],时间='2021-10-29')
year=add.loc['2019/1/2':'2019/4/4',:]

print(year)
df.assign方法
df.assign方法

4、按条件选择分组分别赋值,按条件先选择数据,然后对这部分数据赋值新列,例如2019年最高价大于10,则为高价位,小于10,则为低价位

#先创建一个空列
df['价位']=''
df.loc[df['最高价']>10,'价位']='高价位'
df.loc[df['最低价']<10,'价位']='低价位'
year=df.loc['2019/1/2':'2019/4/4',:]
print(year.head(30))
发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注