如何使用一列的值作为字符串的一部分来填充另一列中的 NaN?
How to use the value of one column as part of a string to fill NaNs in another column?
假设我有以下 df:
year date_until
1 2010 -
2 2011 30.06.13
3 2011 NaN
4 2015 30.06.18
5 2020 -
我想用 30/06/{year +1} 填充 date_until
列中的所有 -
和 NaN
。我尝试了以下但它使用整年列而不是特定行的相应值:
df['date_until] = df['date_until].str.replace('-', f'30/06/{df["year"]+1}')
我的最终目标是计算年份和date_until年份的差值,所以上面的步骤可能就更不需要了。
我们可以在这里使用 pd.to_datetime
和 errors='coerce'
来忽略错误的日期。然后用dt.year
计算差值:
df['date_until'] = pd.to_datetime(df['date_until'], format='%d.%m.%y', errors='coerce')
df['diff_year'] = df['date_until'].dt.year - df['year']
year date_until diff_year
0 2010 NaT NaN
1 2011 2013-06-30 2.0
2 2011 NaT NaN
3 2015 2018-06-30 3.0
4 2020 NaT NaN
对于像我一开始那样尝试替换值的每个人,这里是您可以解决的方法:
for i in range(len(df)):
if pd.isna(df['date_until'].iloc[i]):
df['date_until'].iloc[i] = f'30.06.{df["year"].iloc[i] +1}'
if df['date_until'].iloc[i] == '-':
df['date_until'].iloc[i] = f'30.06.{df["year"].iloc[i] +1}
但是@Erfan 的方法更简洁
假设我有以下 df:
year date_until
1 2010 -
2 2011 30.06.13
3 2011 NaN
4 2015 30.06.18
5 2020 -
我想用 30/06/{year +1} 填充 date_until
列中的所有 -
和 NaN
。我尝试了以下但它使用整年列而不是特定行的相应值:
df['date_until] = df['date_until].str.replace('-', f'30/06/{df["year"]+1}')
我的最终目标是计算年份和date_until年份的差值,所以上面的步骤可能就更不需要了。
我们可以在这里使用 pd.to_datetime
和 errors='coerce'
来忽略错误的日期。然后用dt.year
计算差值:
df['date_until'] = pd.to_datetime(df['date_until'], format='%d.%m.%y', errors='coerce')
df['diff_year'] = df['date_until'].dt.year - df['year']
year date_until diff_year
0 2010 NaT NaN
1 2011 2013-06-30 2.0
2 2011 NaT NaN
3 2015 2018-06-30 3.0
4 2020 NaT NaN
对于像我一开始那样尝试替换值的每个人,这里是您可以解决的方法:
for i in range(len(df)):
if pd.isna(df['date_until'].iloc[i]):
df['date_until'].iloc[i] = f'30.06.{df["year"].iloc[i] +1}'
if df['date_until'].iloc[i] == '-':
df['date_until'].iloc[i] = f'30.06.{df["year"].iloc[i] +1}
但是@Erfan 的方法更简洁