仅当另一列有值时填充指定列的Pandas实现问题
问题解决:仅在col1非空时为col3填充指定字符串
问题原因
现有代码的核心问题是过滤条件错误:
你的col1是数值型列,空值在Pandas中以NaN表示,而非空字符串''。用df['col1'] != ''判断时,数值与空字符串类型不匹配,会返回True,导致所有行都被选中填充。
修正后的代码
import pandas as pd from datetime import datetime, timedelta # 日期处理函数 def add_days_to_date(date, days): subtracted_date = pd.to_datetime(date) + timedelta(days=days) return subtracted_date.strftime("%m-%d") # 示例数据(加入NaN模拟空值场景) df = pd.DataFrame( { 'col1': [12, 34, None, 23, 12, None, 53, 12, 43, 12], 'col2': ['USD', 'CAD', 'USD', 'USD', 'CAD', 'USD', 'USD', 'EURO', 'USD', 'USD'], } ) date = datetime.date.today() date_format = date.strftime('%m-%d') target_str = f"Opened {date_format} will need an update {add_days_to_date(date, 30)}" # 初始化col3为空字符串 df['col3'] = "" # 仅给col1非空的行填充目标字符串 df.loc[df['col1'].notna(), 'col3'] = target_str
关键说明
df['col1'].notna()是Pandas中判断数值列非空(非NaN)的标准方法,能精准定位目标行。- 先将col3初始化为空字符串(或
pd.NA),再通过loc赋值,确保仅符合条件的行被填充。 - 若col1是字符串型列,空值为
'',则可改用df['col1'] != ''作为过滤条件。
内容的提问来源于stack exchange,提问作者Jose Daniel Rojas
相关产品推荐
相关产品推荐

