首先,将术语解释一下,因为Pandas里的数据是以DataFrame对象的形式存储的,DataFrame可以理解为一个二维表格,行对应数据的条目,列对应数据的属性。从这个角度来看,在Pandas中我们所说的“扩展DataFrame的列”,指的是添加新的列(也就是属性)到DataFrame对象中。
下面是一个添加新列到DataFrame中的完整攻略(注:以下所有示例均基于Pandas v1.2.0版本)。
1. 利用直接赋值的方式添加新列
在Pandas中,我们可以通过具体的值或者列表、数组等对象,以直接赋值的方式来增加DataFrame的列。下面的示例演示了如何利用直接赋值的方式添加一列,该列的名字叫 'new_column',它有相同数量的行(即与原DataFrame的索引长度相同),并且每一行的值都是一个固定的字符串 'hello world!'。
import pandas as pd
# 构造一个DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']})
# 添加新列 'new_column'
df['new_column'] = 'hello world!'
print(df)
输出结果如下:
A B new_column
0 1 a hello world!
1 2 b hello world!
2 3 c hello world!
如果新列的值是一个列表,那么新列的长度要与原DataFrame的行数相同。下面的示例演示了如何利用一个列表添加一个新列,该列的名字叫 'new_column_2',每一行对应的列表值分别是 10、20、30。
import pandas as pd
# 构造一个DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']})
# 添加新列 'new_column_2'
df['new_column_2'] = [10, 20, 30]
print(df)
输出结果如下:
A B new_column_2
0 1 a 10
1 2 b 20
2 3 c 30
2. 利用 apply() 方法添加新列
除了直接赋值的方式,我们还可以使用 Pandas 的 apply() 方法向 DataFrame 中添加新列。apply() 方法是用来执行一个函数或者 lambda 表达式的,并且该方法的返回值将被视为新的一列的值。下面的示例演示了如何利用 Pandas 的 apply() 方法向 DataFrame 中添加一列,该列名叫 'new_column_3',这一列的值就是 DataFrame 各行索引的平方。
import pandas as pd
# 构造一个DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']})
# 利用 apply() 方法添加新列 'new_column_3'
df['new_column_3'] = df.index.to_series().apply(lambda x: x ** 2)
print(df)
输出结果如下:
A B new_column_3
0 1 a 0
1 2 b 1
2 3 c 4
除了 apply() 方法,我们还可以使用 Pandas 中的 applymap()、map()、transform() 方法进行列添加,但这些方法主要用于数据转换等需求,并不常用。
3. loc[] 方法编写可读性更好的代码
在利用直接赋值和 apply() 方法添加新列时,我们都是直接通过列名添加新列的,如果列名无法参考相关的数据,代码的可读性就不够高。因此,我们可以将 loc[] 方法用于处理这类问题。
loc[] 方法是 Pandas 中用于按行操作数据的方法,其代码格式为: loc[row_indexer,column_indexer]
。这里的 row_indexer 和 column_indexer 分别表示行所在的位置和列所在的位置。
下面的代码示例演示了如何利用 loc[] 方法添加新列。该示例中,我们在插入新列到 DataFrame 时,将原 DataFrame 的“B”列中值为“a”所在行的“new_column_2”列位置设置为一个固定字符串“\"A\" row match!\"”,而其他行的“new_column_2”列取值则按照原来的来赋值。
import pandas as pd
# 构造一个DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c'], 'new_column_2': [10, 20, 30]})
# 利用 loc[] 方法添加新列 'new_column_4'
df.loc[df['B'] == 'a', 'new_column_4'] = '\"A\" row match!'
df['new_column_4'].fillna('empty', inplace=True)
print(df)
输出结果如下:
A B new_column_2 new_column_4
0 1 a 10 "A" row match!
1 2 b 20 empty
2 3 c 30 empty
其中,我们使用了 df.loc[df['B'] == 'a', 'new_column_4']
对“new_column_4”列的值进行目标行的修改。需要注意的是,'df.loc[]' 内部的 'df['B'] == 'a'' 已经将原有 DataFrame 的 “B” 列限定为等于 'a',因此除索引位置外再添加其他筛选条件可能会造成诸多不必要的麻烦,在使用 loc[] 方法时尽可能少的添加额外筛选条件。
至此,我们讲解了如何在 Pandas 中添加新的列,其中包括了直接赋值、使用 apply() 函数以及 loc[] 方法等不同的技术方案。希望这些技术方案能够对你在实际开发中遇到的问题有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何扩展Pandas DataFrame的列 - Python技术站