向Pandas DataFrame添加新列是一项基本的数据操作任务。通常,您需要使用默认值初始化这些新列。本文探讨了在Pandas中实现此目的的两种有效方法:pandas.DataFrame.assign()
和pandas.DataFrame.insert()
,重点介绍了它们的差异和最佳用例。
目录
使用pandas.DataFrame.assign()
添加列
assign()
方法提供了一种简洁明了的方法来添加新列。重要的是,它返回一个新的DataFrame,而不会更改原始DataFrame。这种函数式方法促进了不变性,并有助于防止意外修改。
import pandas as pd
# 示例DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
print("原始DataFrame:n", df)
# 添加一个值为0的新的列'C'
df_new = df.assign(C=0)
print("n添加列'C'后的DataFrame:n", df_new)
print("n原始DataFrame保持不变:n", df)
#一次添加多列
df_new = df.assign(C=0, D='default')
print("n添加多列后的DataFrame:n", df_new)
添加具有条件默认值的列
对于需要根据现有数据设置条件默认值的更复杂场景,可以将assign()
与其他Pandas特性结合使用。这提供了更大的控制和灵活性。
import pandas as pd
import numpy as np
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
# 添加一个值为NaN的列'C'作为占位符,然后有条件地赋值
df['C'] = np.nan
df.loc[df['A'] > 1, 'C'] = 10
df.loc[df['A'] <= 1, 'C'] = 20
print("n添加并有条件地设置列'C'后的DataFrame:n", df)
使用pandas.DataFrame.insert()
添加列
insert()
方法允许精确控制列的位置。与assign()
不同,它会就地修改DataFrame。这意味着原始DataFrame会被直接更改。
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
# 在位置1(索引1)添加一个值为0的新列'C'
df.insert(1, 'C', 0)
print("n插入列'C'后的DataFrame:n", df)
因为insert()
会就地修改DataFrame,所以如果您需要保留原始DataFrame,则务必使用.copy()
创建副本。
选择正确的方法
assign()
和insert()
的选择取决于您的需求。assign()
通常因为它函数式且不变的特性而更受欢迎,尤其是在处理复杂逻辑或添加多列时。当精确的列位置至关重要且就地修改可以接受时,insert()
很有用。始终考虑就地修改的影响,以避免意外后果。