Как создать условное предложение, если столбец в кадре данных пуст? - PullRequest
0 голосов
/ 11 октября 2018

У меня есть df, который выглядит следующим образом:

fname                   lname
joe                      smith
john smith      
jane@jane.com            
jacky /jax               jack
a@a.com                  non
john (jack)              smith
Bob J. Smith

Я хочу создать логику, которая говорит, что если lname пусто, и если в fname есть две OR три строкиотделите вторую строку OR третью строку и вставьте ее в столбец lname.Если адрес электронной почты в fname оставить как есть, а если косая черта или скобка в столбце fname, а значение в lname не оставить, как есть.

new df:

fname                   lname
    joe                      smith
    john                     smith
    jane@jane.com            
    jacky /jax               jack
    a@a.com                  non
    john (jack)              smith
    Bob J.                   smith

Код для разделения двух строк:

df[['lname']] = df['name'].loc[df['fname'].str.split().str.len() == 2].str.split(expand=True)

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Со следующим примером кадра данных:

df = pd.DataFrame({'fname': ['joe', 'john smith', 'jane@jane.com', 'jacky /jax', 'a@a.com', 'john (jack)', 'Bob J. Smith'],
     'lname': ['smith', '', '', 'jack', 'non', 'smith', '']})

Вы можете использовать np.where():

conditions = (df['lname']=='') & (df['fname'].str.split().str.len()>1)

df['lname'] = np.where(conditions, df['fname'].str.split().str[-1].str.lower(), df['lname'])

Выход:

           fname  lname
0            joe  smith
1     john smith  smith
2  jane@jane.com       
3     jacky /jax   jack
4        a@a.com    non
5    john (jack)  smith
6   Bob J. Smith  smith

Для удаления последней строкииз столбца fname строк, в которых был заполнен столбец lname:

df['fname'] = np.where(conditions, df['fname'].str.split().str[:-1].str.join(' '), df['fname'])

Выход:

           fname  lname
0            joe  smith
1           john  smith
2  jane@jane.com       
3     jacky /jax   jack
4        a@a.com    non
5    john (jack)  smith
6         Bob J.  smith
0 голосов
/ 11 октября 2018

Если я правильно понимаю, у вас есть фрейм данных со столбцами fname и lname.Если это так, то вы можете изменить пустые строки в столбце lname с помощью:

condition = (df.loc[:, 'lname'] == '') & (df.loc[:, 'fname'].str.contains(' '))
df.loc[condition, 'lname'] = df.loc[condition, 'fname'].str.split().str[-1]

Код работает для примеров данных, которые вы предоставили в вопросе, но его следует улучшить, чтобы использовать в более общем случае.

Для изменения столбца fname вы можете использовать:

df.loc[condition, 'fname'] = df.loc[condition, 'fname'].str.split().str[:-1].str.join(sep=' ')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...