使用字典按行更新Pandas DataFrame切片的相关问题咨询
使用字典按行更新Pandas DataFrame切片的相关问题咨询
我正在按行更新pandas.DataFrame的一个切片中的值,让切片的每一行都有唯一值,我使用的是pandas 2.2.3版本。
我找到了一种似乎有效的方法,使用{row_index: row_value}格式的字典(见最小可行示例1)。
我想了解:
- 示例1中的方法是否可行、为什么可行、具体是如何工作的,以及这是否是解决该问题的合理方式。
- 使用这种方法是否会有任何意外行为
- 为什么示例2中的方法无法工作/会引发错误
- 是否有其他更合适的方法可以实现此目的。
我在Stack Overflow或其他地方都找不到有关这种方法的相关信息。
我的具体用例与示例1略有不同,差异详情列在底部,可能会有相关性。
最小可行示例1(可行)
这里字典的值似乎确实映射到了每个字典键对应的行中
>>> import pandas as pd >>> df = pd.DataFrame.from_dict({'a': [None, None], 'b': [None, None], 'c': [None, None]}) >>> df.loc[df.index, df.columns] = {0: 1, 1: 2} >>> df a b c 0 1 1 1 1 2 2 2
最小可行示例2(不可行)
这里,只是以不同的方式选择整个DataFrame,就会引发错误。
>>> import pandas as pd >>> df2 = pd.DataFrame.from_dict({'a': [None, None], 'b': [None, None], 'c': [None, None]}) >>> df2.loc[:, :] = {0: 1, 1: 2} ValueError: setting an array element with a sequence.
类似问题参考
Stack Overflow上有一个类似问题的回答,解释了为什么执行df.iloc[0] = {'a': 1, 'b': 2, 'c': 3}时,字典的键会被映射到行中,这更让人困惑。
我的具体用例细节
我的具体用例与最小可行示例1略有不同:我有一个更大的DataFrame,其中有一些连续的NaN值,因此我是通过df.loc[df_index_subset, df_columns_subset]来更新DataFrame的这个切片/子集,而不是用df.loc[df.index, df.columns]选择整个DataFrame。不过,行为和示例1相同,它会根据字典的键值对按行填充DataFrame的切片。
备注:内容来源于stack exchange,提问作者Ouroboroski
相关产品推荐
相关产品推荐

