(三)pandas-添加数据

添加行列数据可以选择切片方式(iloc是不能添加数据的,loc才行)添加,也可以选择用pandas提供的相关api添加

还是以之前的dataframe为例:

1、添加行数据

例如添加悟空的成绩:

import pandas as pd

scores = [23, 88, 12], [99, 88, 100], [44, 77, 68]
df = pd.DataFrame(scores, index=['张三', '李四', '王二麻子'], columns=['语文', '数学', '英语'])

# 如果值为序列,并且序列长度不是1或3则会抛出异常,因为pandas不知道怎么赋值
1. df.loc["悟空"] = 100 / [100] / [100, 100, 100]

# append已经被删除了,改用concat代替
2.df = pd.concat([df, pd.DataFrame(([100, 100, 100], ), index=["悟空"], columns=['语文', '数学', '英语'])])

如果loc所用的key已存在,那就是修改数据。很明显切片赋值方式添加数据要简单的多,concat、join、merge等api虽然也能达到效果,但它们更多是用于合并两个dataframe。

2、添加列数据

① 所有人添加一门音乐课的成绩:

import pandas as pd

scores = [23, 88, 12], [99, 88, 100], [44, 77, 68]
df = pd.DataFrame(scores, index=['张三', '李四', '王二麻子'], columns=['语文', '数学', '英语'])

1. 切片赋值
df["音乐"] = 100
df["音乐"] = [100, 90, 80]

df.loc[:, "音乐"] = 100
df.loc[:, "音乐"] = [56, 67, 78]

2. assign
df = df.assign(音乐=[100, 90, 80])
df = df.assign(音乐=100)

3. eval
df.eval("音乐=100", inplace=True)
df.eval("音乐=[11, 22, 33]", inplace=True)
# inplace=True 表示就地修改df,而不是返回一个新的dataframe

4. insert
df.insert(3, "音乐", 90, allow_duplicates=True)
df.insert(3, "音乐", [78, 78, 78], allow_duplicates=True)
 # allow_duplicates=True表示是否允许重复列名

② 所有人添加一门音乐课和一门历史课成绩:

import pandas as pd

scores = [23, 88, 12], [99, 88, 100], [44, 77, 68]
df = pd.DataFrame(scores, index=['张三', '李四', '王二麻子'], columns=['语文', '数学', '英语'])


1. 切片赋值
df[["音乐", "历史"]] = 100, 67
df.loc[:, ["音乐", "历史"]] = 100, 67

2. assign
d = {"音乐": [100, 90, 80], "历史": [110, 190, 80]}
df = df.assign(**d)

df = df.assign(音乐=100, 历史=90)

3. eval
df.eval("""
音乐=[11, 22, 33]
历史=[55, 55, 34]
""", inplace=True)
df.eval("""
音乐=10
历史=[55, 55, 34]
""", inplace=True)

对于eval,还有更多用法,比如现在需要加一个总成绩列,通过eval可以很容易实现:

import pandas as pd

scores = [23, 88, 12], [99, 88, 100], [44, 77, 68]
df = pd.DataFrame(scores, index=['张三', '李四', '王二麻子'], columns=['语文', '数学', '英语'])

df.eval("总分=语文+数学+英语", inplace=True)
print(df)
"""
      语文  数学   英语   总分
张三    23  88   12  123
李四    99  88  100  287
王二麻子  44  77   68  189
"""

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值