Python pandas 库是数据处理中不可或缺的一个工具,它提供了丰富的数据分析和操作方法,可以轻松地对数据进行汇总、排序、过滤、分组、并列计算等操作。在实际的数据处理中,我们经常需要添加一列数据,以补充或修正已有数据的信息。本文将从不同的角度来探讨 pandas 如何方便地添加新的一列数据。
一、dataframe 添加一列数据
在 pandas 中,DataFrame 是最为常用的数据类型,它类似于数据库中的表格,每列为一种数据类型,每行为一个样本。添加新的一列数据对 DataFrame 类型的数据进行扩充。
我们可以使用 Pandas 的 Series 对象来添加一列数据,以存储某一列的数据信息。比如,在以下的示例中,我们创建了一个包含学生信息、成绩和排名的表格,我们要添加一个名为“是否及格”的一列数据,以表示学生是否及格。
import pandas as pd
# 创建一个 DataFrame
data = {'姓名': [ '张三', '李四', '王五', '赵六' ],
'成绩': [ 89, 76, 67, 92 ],
'排名': [ 1, 3, 4, 2 ]}
df = pd.DataFrame(data)
# 创建一个表示是否及格的 Series 对象
df['是否及格'] = pd.Series(['是' if x >= 60 else '否' for x in df['成绩']])
print(df)
输出结果如下:
姓名 成绩 排名 是否及格
0 张三 89 1 是
1 李四 76 3 是
2 王五 67 4 是
3 赵六 92 2 是
二、pandas 添加一行数据
添加新的一行数据对 DataFrame 类型的数据进行扩充。与添加一列数据不同,添加一行数据通常需要先创建一个新的内存地址存储完整的数据集,然后再合并到原有的数据集中。
下面的示例中,我们通过先构建一个新的数据 DataFrame,然后将其与原来的 DataFrame 进行合并,最终得到用于表示某个新生的完整数据。
import pandas as pd
# 创建一个 DataFrame
data = {'姓名': [ '张三', '李四', '王五', '赵六' ],
'成绩': [ 89, 76, 67, 92 ],
'排名': [ 1, 3, 4, 2 ]}
df = pd.DataFrame(data)
# 创建一个新的 DataFrame 表示新的一行数据
new_row = pd.DataFrame({'姓名': ['小七'], '成绩': [85], '排名': [5]})
# 将新的一行数据合并到原有的 DataFrame 中
df = pd.concat([df, new_row], ignore_index=True)
print(df)
输出结果如下:
姓名 成绩 排名
0 张三 89 1
1 李四 76 3
2 王五 67 4
3 赵六 92 2
4 小七 85 5
三、pandas 删除某一列
有时候我们需要删除 DataFrame 中某一列的数据,以便更好地满足我们的数据分析需求。我们可以使用 pandas 的 drop 函数来去除不需要的列。
以下示例中,我们创建了一个包含产品名称、销售量和价格的 DataFrame 表格,我们要删除“价格”一列数据。
import pandas as pd
# 创建一个 DataFrame
data = {'产品名称': [ '商品A', '商品B', '商品C', '商品D' ],
'销售量': [ 101, 87, 62, 99 ],
'价格': [ 10, 12, 8, 15 ]}
df = pd.DataFrame(data)
# 删除“价格”一列数据
df = df.drop('价格', axis=1)
print(df)
输出结果如下:
产品名称 销售量
0 商品A 101
1 商品B 87
2 商品C 62
3 商品D 99
四、pandas 读取一列数据
读取 DataFrame 中某一列的数据通常需要指定该列的名称或者索引位置。我们可以使用 pandas 的 loc 函数、iloc 函数来进行单元格级别的索引,或者使用数据框的直接索引来获取其中特定的列。
以下示例中,我们创建了一个包含学生信息、成绩和排名的表格,我们要读取“成绩”和“排名”列数据。
import pandas as pd
# 创建一个 DataFrame
data = {'姓名': [ '张三', '李四', '王五', '赵六' ],
'成绩': [ 89, 76, 67, 92 ],
'排名': [ 1, 3, 4, 2 ]}
df = pd.DataFrame(data)
# 使用iloc函数来索引“成绩”和“排名”列数据
score_rank = df.iloc[:, 1:3]
print(score_rank)
# 使用数据框的直接索引来获取“成绩”和“排名”列数据
score_rank = df[['成绩', '排名']]
print(score_rank)
输出结果如下:
成绩 排名
0 89 1
1 76 3
2 67 4
3 92 2
成绩 排名
0 89 1
1 76 3
2 67 4
3 92 2
五、pandas 增加一列数据
在有时候我们需要增加 DataFrame 中的一列数据,并且该列数据来源于现有数据的连续运算,比如某一列数据的累加或者求平均值。在 pandas 中,我们可以使用 apply 函数来操作数据列。
以下示例中,我们创建了一个包含销售门店名称、销售额和员工人数的 DataFrame 表格,我们要增加一列“平均销售额”。
import pandas as pd
# 创建一个 DataFrame
data = {'门店名称': [ '门店A', '门店B', '门店C', '门店D' ],
'销售额': [ 10000, 12000, 8000, 15000 ],
'员工人数': [ 20, 15, 12, 25 ]}
df = pd.DataFrame(data)
# 定义函数计算平均销售额
def avg_sales(row):
return row['销售额'] / row['员工人数']
# 使用 apply 函数计算出新列数据
df['平均销售额'] = df.apply(avg_sales, axis=1)
print(df)
输出结果如下:
门店名称 销售额 员工人数 平均销售额
0 门店A 10000 20 500.0
1 门店B 12000 15 800.0
2 门店C 8000 12 666.7
3 门店D 15000 25 600.0
六、pandas 输出数据的行列数
在 pandas 中,我们可以使用 shape 属性获取数据集的行列数,使用 head 函数输出前几行数据,tail 函数输出后几行数据
以下示例中,我们创建了一个包含 1000 行、4 列的 DataFrame 数据表格,通过 head、tail 函数获取数据的前五行和后五行, shape 属性获取数据的行列数。
import pandas as pd
import numpy as np
# 创建一个 1000 行,4 列的 DataFrame
df = pd.DataFrame(np.random.randn(1000, 4), columns=list('ABCD'))
# 输出前 5 行数据
print(df.head(5))
# 输出最后 5 行数据
print(df.tail(5))
# 输出行列数
print('数据集的行列数为:', df.shape)
输出结果如下:
A B C D
0 -0.842090 0.934622 -0.657901 0.353423
1 0.381760 -0.872082 0.974246 -1.220813
2 1.293013 -0.600729 0.429112 0.115918
3 -0.427546 0.456113 -0.782722 1.010340
4 0.876370 -0.664943 -1.511310 0.678428
A B C D
995 1.509793 -0.829112 -0.399677 -1.237050
996 0.658548 1.491414 -1.569960 0.214848
997 0.707204 -0.939782 0.139450 0.657119
998 0.423334 0.280183 -0.999327 -0.039078
999 -0.444732 0.645677 0.688853 -0.970362
数据集的行列数为: (1000, 4)
七、pandas 取两列数据
有时候我们需要只关注数据集中的某几列数据,用于不同的分析或者建模。我们可以使用 pandas 的 loc 函数、iloc 函数来进行单元格级别的索引,或者使用数据框的直接索引来获取其中特定的列。
以下示例中,我们创建了一个包含学生信息、成绩和排名的表格,我们要读取“成绩”和“排名”列数据。
import pandas as pd
# 创建一个 DataFrame
data = {'姓名': [ '张三', '李四', '王五', '赵六' ],
'成绩': [ 89, 76, 67, 92 ],
'排名': [ 1, 3, 4, 2 ]}
df = pd.DataFrame(data)
# 使用iloc函数来索引“成绩”和“排名”列数据
score_rank = df.iloc[:, 1:3]
print(score_rank)
# 使用数据框的直接索引来获取“成绩”和“排名”列数据
score_rank = df[['成绩', '排名']]
print(score_rank)
输出结果如下:
成绩 排名
0 89 1
1 76 3
2 67 4
3 92 2
成绩 排名
0 89 1
1 76 3
2 67 4
3 92 2
八、pandas 数据列的计算
在 pandas 中,我们可以对不同列的数据进行计算,以得到新的一列或多列数据。在数据计算时,我们通常使用 apply 函数或者 map 函数,以便对数据集中的每个单元格进行计算或者操作。
以下示例中,我们创建了一个包含工资和税费的 DataFrame 表格,我们要计算出税后工资,以增加一列“税