pandas学习笔记--增加行或列

一、增加行

(1)loc()

想增加一行,行名称为‘5’,内容为[16, 17, 18, 19]

df.loc['5'] = [16, 17, 18, 19]    # 后面的序列是Iterable就行
(2)at
df.at['5'] = [16, 17, 18, 19]
(3)set_value
df.set_value('5', df.columns, [16, 17, 18, 19], takeable=False)    #新版本中set_value会被删除
(4)append

添加有name的Series:

s = pd.Series([16, 17, 18, 19], index=df.columns, name='5')
df = df.append(s)

添加没有name的Series,必须ignore_index:

s = pd.Series([16, 17, 18, 19], index=df.columns)
df = df.append(s, ignore_index=True)  

可以 append字典列表,同样需要必须ignore_index:

ls = [{'A': 16, 'B': 17, 'C': 18, 'D': 19}, {'A': 20, 'B': 21, 'C': 22, 'D': 23}]
df = df.append(ls, ignore_index=True)
(5)逐行增加

简单的逐行添加内容,可以:

df.loc[len(df)] = [16, 17, 18, 19]

但需要注意:len(df)生成的是int,如果生成的int,df已经存在了,会覆盖该行数据,而不会新增

(6)插入行

增加行没找到类似insert这种可以插入的方法,暂时替代方法可以先reindex,再赋值:

df = df.reindex(index=df.index.insert(2, '5'))
df.loc['5'] = [16, 17, 18, 19]

二、增加列

想增加一列’E’,值等于’A’和’C’列对应值之和。

(1)遍历DataFrame获取序列的方法

下面是得到’A’和’C’列对应值之和的新序列的四种方法:

s = [a + c for a, c in zip(df['A'], df['C'])]          # 通过遍历获取序列
s = [row['A'] + row['C'] for i, row in df.iterrows()]  # 通过iterrows()获取序列,s为list
s = df.apply(lambda row: row['A'] + row['C'], axis=1)  # 通过apply获取序列,s为Series
s = df['A'] + df['C']                                  # 通过Series矢量相加获取序列
s = df['A'].values + df['C'].values                    # 通过Numpy矢量相加获取序列

用[]或loc添加

通过df[]或者df.loc添加序列

df.loc[:, 'E'] = s
df['E'] = s
Insert

可以指定插入位置,和插入列名称

df.insert(0, 'E', s) 
Df.insert(len(Df.loc[0]),'加热炉出口温差',diff_max) #在Df最后位置插入新的列
concat
s = pd.Series([16, 17, 18, 19], name='E', index=df.index)
df = pd.concat([df, s], axis=1)
iloc和loc遍历过程中给列赋值

效率比较低

df[‘E’]是DataFrame的一个Series,是引用,对其修改也能改变DataFrame,但运行时报了Warning

df['E'] = None  # 需事先创建e列,否则iloc遍历会报错,loc遍历无需事先创建
for i in range(len(df)):
    df['E'].iloc[i] = df['A'].iloc[i] + df['C'].iloc[i] 
# SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame

不用Series不会报Warning:

df['E'] = None
col_no = [i for i in df.columns].index('E') 
for i in range(len(df)):
    df.iloc[i, col_no] = df['A'].iloc[i] + df['C'].iloc[i]

用loc无需先给E列赋空值:

for i in df.index:
    df.loc[i, 'E'] = df.loc[i, 'A'] + df.loc[i, 'C']
逐列增加

简单的逐列添加内容,可以:

df[len(df)] = [16, 17, 18, 19]

但需要注意:len(df)生成的是int,如果生成的int,df已经存在了,会覆盖该列数据,而不会新增

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值