如何将DataFrame中start列的None值替换为同行end列的值?
解决Pandas中替换start列空值为对应end列值的问题
你的代码无效主要有两个原因:
- 空值判断错误:DataFrame里的
None是Python空值(对应Pandas的NaN/pd.NA),不是字符串"None",所以df["start"]=="None"匹配不到目标行。 - 链式赋值问题:
df[...]["start"]=这种写法修改的是原DataFrame的副本,而非原数据本身,所以原DataFrame不会变化。
以下是两种简单有效的实现方法:
方法一:使用fillna(最简洁)
df['start'] = df['start'].fillna(df['end'])
fillna会自动将start列的所有空值替换为对应行end列的值,直接赋值回原列即可修改原DataFrame。
方法二:使用loc直接修改原数据
df.loc[df['start'].isna(), 'start'] = df['end']
用isna()准确识别空值行,通过loc直接定位原DataFrame的目标行列进行赋值,避免副本问题。
执行任意一种方法后,你就能得到期望的结果:
myid user start end a tom 2023-01-01T23:41:32 2023-01-02T23:41:32 b dick 2023-01-05T20:41:32 2023-01-05T20:41:32 c harry 2023-01-01T23:41:32 2023-01-03T21:41:32 d sally 2023-01-05T03:41:32 2023-01-05T03:41:32
内容的提问来源于stack exchange,提问作者abinitio
相关产品推荐
相关产品推荐

