У меня есть 2 столбца в этом формате в csv.
Drug Product(Predicted)
#N/A acetaldehyde
#N/A nicotine
#N/A resin
#N/A rosa
#N/A eliglustat
#N/A valpromide
#N/A clostridium
#N/A ambenonium
solution valpromide
solution valpromide
solution valpromide
solution valpromide
solution valpromide
solution valpromide
solution valpromide
solution valpromide
solution valpromide
#N/A amiloride
#N/A valsartán
#N/A manitol
#N/A hipromelosa
#N/A fosfato disódico
#N/A fosfato disódico
#N/A agalsidase beta
#N/A enoxaparin sodium
solution warfarine
#N/A eliglustat
#N/A silver
#N/A silver
Результат, который я ищу, заключается в том, что создайте новый столбец и всякий раз, когда в столбце наркотиков присутствует запись (игнорируйте все N/A), добавьте эту запись в новый столбец, объединив 2 столбца со знаком плюс и получите выходной CSV
Например:
New column
solution + valpromide
solution + valpromide
solution + warfarine
Я новичок в пандах, поэтому я хотел знать, как это можно сделать, используя тот же
Используйте Series.str.cat
с Series.str.strip
:
df['new'] = df['Drug'].str.cat(df['Product(Predicted)'], na_rep='', sep='+').str.strip('+')
Или замените отсутствующие значения пустыми строками перед слиянием:
df['new'] = (df['Drug'].fillna('') + '+' + df['Product(Predicted)']).str.strip('+')
print (df)
Drug Product(Predicted) new
0 NaN acetaldehyde acetaldehyde
1 NaN nicotine nicotine
2 NaN resin resin
3 NaN rosa rosa
4 NaN eliglustat eliglustat
5 NaN valpromide valpromide
6 NaN clostridium clostridium
7 NaN ambenonium ambenonium
8 solution valpromide solution+valpromide
9 solution valpromide solution+valpromide
Если вы хотите удалить строки с NaN
s в столбце drug
:
df1 = df.dropna(subset=['Drug'])
df1['new'] = df1['Drug'] + '+' + df1['Product(Predicted)']
print (df)
Drug Product(Predicted) new
8 solution valpromide solution+valpromide
9 solution valpromide solution+valpromide
Мне просто нужна конкатенированная строка для каждой строки, которая не содержит NA.
@BilzzM - Да, а что будет со строками, если у drug
есть NaN
s?
@BilzzM - есть 3 возможных решения - удалить эти строки в моем последнем абзаце, или игнорировать их, как мой первый абзац, или остаться NaN
в выходном столбце на df['new'] = df['Drug'].str.cat(df['Product(Predicted)'], sep='+')
поэтому только лекарства содержат NaN. Поэтому всякий раз, когда в колонке о наркотиках есть NaN, я просто хочу игнорировать это. Пробую ваши решения, большое спасибо :)
Еще одно сомнение, на самом деле я изменил свой CSV и добавил еще один столбец с именем файла. Что я хочу сделать, так это сохранить имя файла в виде отдельного столбца, чтобы отслеживать имена файлов, для которых я получаю вывод (конкатенированная строка). Итак, я не хочу объединять столбец имени файла, но хочу, чтобы он был отдельным столбцом в моем CSV. Любая идея о том, как это сделать?
@BilzzM - Не уверен, что понял, потому что мой код не объединяет столбцы filename
, не использовал его. Так что, если добавить его, нет никаких изменений. Или чего-то не хватает? Как мой код может повлиять на столбец filename
?
Я спрашиваю, я добавил третий столбец под названием «Имена файлов». Итак, что я хочу узнать в своем выходном csv, так это имена файлов, для которых у меня есть конкатенированные строки, то есть df1['new']. Как вывести это в csv, сохранив имена файлов в одном столбце и df1['new'] в другом столбце
Да, так что используйте df[['Filename','new']].to_csv(file, index=False)
Если я это сделаю, df1['new'] = df1['Drug'] + '+' + df1['Product(Predicted)'] + df1['Filename'], я получу одну строку, содержащую все, кроме df1[ «Имя файла»] в виде отдельного столбца в csv
@BilzzM - Значит, не работает df1[['Filename','new']].to_csv(file, index=False)
? Он фильтрует только столбцы Filename
и new
и записывает в csv
Если у вас нет нулевых значений в вашем фрейме данных, упомянутых как нулевые, я предлагаю вам сделать следующее:
df["drug"].replace("#N/A", np.nan, inplace = True)
Как только вы заменили отсутствующие значения на null, ответ будет состоять из одной строки кода.
df["new_col"] = df["drug"] + " + " + df["Product"]
Приведенный выше код вернет значение null, если любой из столбцов, продуктов или лекарств имеет значение null.
Надеюсь это поможет.
@BilzzM - Вам нужен последний абзац? Удалить эти строки? Или нужно вывести NaN с помощью
df['new'] = df['Drug'].str.cat(df['Product(Predicted)'], sep='+')
?