如何避免在df.loc[row,col]=val中添加新记录?(更新DataFrame值时)



我有一个数据帧,我想根据索引更新它的值。

在我的情况下,我有一个数据文件太大,无法读取到内存中,所以我只是逐行读取。这里我只举一个字典为例,它将df索引映射到一个值。

问题是在下面的代码中,在for循环之后,将在df中添加一个新行。

我遇到了一个解决方案,添加了条件if key in df.index:,但时间复杂性似乎太高,我不确定是否有更好的解决方案来处理大型数据集。

df = pd.DataFrame({'alpha': ['a', 'b', 'c']})
df  # only 3 rows
Out[20]: 
alpha
0     a
1     b
2     c
trans = {1: 'B',2: 'C',3: 'D'}
for key, val in trans.items():
df.loc[key, 'alpha'] = val

df  # change to 4 rows
Out[23]: 
alpha
0     a
1     B
2     C
3     D
df
###
alpha
0     a
1     b
2     c



实际上我们想使用replace()来完成任务。具有对应映射值的dict内的CCD_ 3。

trans_df = pd.DataFrame(
{'target': trans.values()}, 
index=trans.keys())
trans_df
###
target
1      B
2      C
3      D
map_target = dict(df.join(trans_df).dropna().values)
map_target
###
{'b': 'B', 'c': 'C'} ← This is what we need

df['alpha'] = df['alpha'].replace(map_target)
df
###
alpha
0     a
1     B
2     C

最新更新