Pandas DataFrame是Python数据操作的基石。你经常需要修改DataFrame中的单个单元格。本文探讨了使用DataFrame索引实现此目的的三种高效方法。
目录
使用.at
设置单元格值
.at
访问器提供了一种高效的方式,可以使用其行和列标签访问和修改DataFrame中的单个单元格。其速度使其成为单值赋值的理想选择。
import pandas as pd
# 示例DataFrame
data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data, index=['A', 'B', 'C'])
# 将'B'行'col1'列单元格的值设置为10
df.at['B', 'col1'] = 10
print(df)
这将输出:
col1 col2
A 1 4
B 10 5
C 3 6
当处理单个单元格时,.at
针对速度和简单性进行了优化。但是,尝试赋值多个值将导致TypeError
。
使用.loc
设置单元格值
.loc
访问器提供了更大的灵活性。它允许基于标签的行和列索引,并且可以同时处理对单个值或数组到多个单元格的赋值。
import pandas as pd
# 示例DataFrame
data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data, index=['A', 'B', 'C'])
# 将'A'行'col2'列单元格的值设置为100
df.loc['A', 'col2'] = 100
print(df)
# 设置多个值
df.loc[['A', 'B'], 'col1'] = [5, 15] # 将5赋值给A,15赋值给B
print(df)
这将首先输出:
col1 col2
A 1 100
B 2 5
C 3 6
然后:
col1 col2
A 5 100
B 15 5
C 3 6
.loc
是最通用的方法,适用于单单元格更新和涉及多行多列的更复杂场景。虽然用途广泛,但对于单单元格更改,.at
通常更快。
已弃用的.set_value()
方法
在较新的Pandas版本中,.set_value()
方法已被弃用。虽然它可能仍然在较旧的版本中运行,但强烈建议使用.at
或.loc
以获得更好的兼容性和性能。避免在新代码中使用.set_value()
。
总而言之,.at
和.loc
都提供了修改Pandas DataFrame中单个单元格的有效方法。对于单个值,建议使用.at
,因为它速度快且简单;对于处理多个单元格或更复杂的修改,则建议使用.loc
。