控制df.at或df.loc的行为

时间:2018-05-29 10:42:38

标签: python pandas dataframe indexing

如何控制df.at()df.loc()的行为,以便在与索引不匹配时返回KeyErrorIndexError?例如:

import pandas as pd

index = ['A','B','C']
headers = [1,2,3,4]

df = pd.DataFrame(index=index,columns=headers)

df.at['A',1] = "Hello"

这会将df中适当位置的值更新为" Hello"。细

然而:

df.at['D',1] = "Hello"

以上在df中创建了一个新行,索引为" D"并投入价值。

如何控制它,以便引发异常呢?我可以将索引设置为只读吗?

1 个答案:

答案 0 :(得分:1)

一种方法是使用Categorical Data。请注意,这会影响任何方法,该方法尝试将项目添加到索引时,该索引在转换为Categorical时不属于索引。

df.index = pd.Series(df.index).astype('category')

# SUCCESS
df.at['C', 1] = 'Bye'

# FAIL
df.at['D', 1] = 'Hello'

你会发现:

  

KeyError :'D'

     

TypeError :无法将项目插入尚未成为现有类别的CategoricalIndex