使用python将Y从X列填充到Y列

时间:2018-11-23 10:49:26

标签: python excel pandas nan

我有一栏说X,里面有一些数据。我想将这些数据移到另一列“ Y”中。我有执行此操作的代码。

This shows column X and Y # in Column Y meaning NAN 代码如下:

id = df['X'].str.extract(r"(\d[8]s\d[2])",expand=False).tolist() #extracting values which look like 12345678s12 and i include NaN values 

df_new= pd.DataFrame({'Y':id})
wb = load_workbook('text.xlsx')
ws = wb['Sheet1']
for index, row in df_new.iterrows():
    cell = 'Y%d'  % (index + 2)
    ws[cell] = row[0]
wb.save('text.xlsx')

我面临的问题是Y列中有一些数据,并且代码用id覆盖了整个Y列。 我不希望发生这种情况。我想将数据保留在Y列中,并且仅当其中包含NaN值时,才希望将它们替换为对应的id值。

4 个答案:

答案 0 :(得分:3)

您可以使用:

df['Y'] = np.where(df['Y']=='#', df['X'], df['Y'])

答案 1 :(得分:1)

mask

您可以将一个系列与另一个系列屏蔽:

df['Y'].mask(df['Y'] == '#', df['X'], inplace=True)

这是一个演示版本,该演示无法使用:

df = pd.DataFrame({'X': ['A', 'B', 'C', 'D', 'E'],
                   'Y': ['#', '1', '2', '#', '3']})

df['Y'] = df['Y'].mask(df['Y'] == '#', df['X'])

print(df)

   X  Y
0  A  A
1  B  1
2  C  2
3  D  D
4  E  3

答案 2 :(得分:1)

使用np.where

df['Y'] = np.where(df['Y'] == '#', df['X'], df['Y'])

答案 3 :(得分:0)

.loc

您是否要将值从x替换为y,其中y包含#

如果可以的话,

df.loc[df['Y']=='#','Y']=df['X']

由于您的目标是仅替换Y具有#的记录,因此屏蔽或锁定Y具有#的索引,然后从{{1} }至X仅锁定索引。

如果要处理空白,

Y