Я пытаюсь конкатенировать две колонки в пандах DataFrame. Проблема в том, что в обеих сериях существует значение None, результатом является NaN. Поскольку реальные данные очень большие, и есть значение, чтобы сохранить исходные значения None для последующей ссылки, я надеюсь не изменять исходное значение в столбцах. Есть ли способ добиться этого в пандах?Конкатенация двух серий без значения None (pandas DataFrame)?
Чтобы создать пример DataFrame:
import pandas as pd
f = pd.DataFrame([['a', 'b','c','a', 'b','c'],['1', '2','3', '4', '5','6', ]])
f = f.transpose()
f.columns = ['xx', 'yy']
f.xx[0] = None
f.yy[0] = None
f.xx[2] = None
f.yy[3] = None
xx yy
0 None None
1 b 2
2 None 3
3 a None
4 b 5
5 c 6
Я попытался f['new_str'] = f.xx + f.yy
и f['new_str'] = f['xx'] + f['yy']
. Оба устанавливают объединенное значение в NaN, если какое-либо значение имеет тип None. Я думаю, это связано с тем, как pandas обрабатывают тип None
. Тип None и тип str не могут быть «добавлены» оператором «+».
xx yy new_str
0 None None NaN
1 b 2 b2
2 None 3 NaN
3 a None NaN
4 b 5 b5
5 c 6 c6
Вот что я хочу сделать:
f['new_str'] = f.xx.map(lambda x: '')
for idx, arow in f.iterrows():
con = ''
if arow.xx:
con += arow.xx
if arow.yy:
con += arow.yy
f.loc[idx,'new_str'] = con
f
xx yy new_str
0 None None
1 b 2 b2
2 None 3 3
3 a None a
4 b 5 b5
5 c 6 c6
Мой вопрос заключается в том, что делает панды поддерживает более элегантный/простой способ для достижения этой цели?
Тот же метод, но не как чистый: 'f.apply (лямбда-строка: (строки [ 'ого'] или '') + (строка ['yy'] или ''), axis = 1) ' –
@pneumatics Спасибо. В исходных данных исходное поле не нужно изменять, потому что «Нет» и пустая строка имеют различный смысл. Есть ли способ сделать это без изменения исходного столбца? Благодарю. – Bin
@ Попробуйте, это не изменит значения в столбцах 'xx' или' yy', потому что они не назначены с левой стороны. 'fillna' работает над копией данных. – pneumatics