1
我想連接pandas DataFrame中的兩列。問題是當兩個系列中都有None值時,結果是NaN。 由於實際數據非常大,並且有值保留原始無值以供以後參考,所以我希望不要更改列中的原始值。有沒有辦法在熊貓中實現這一點?用None值連接兩個系列(pandas 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']
。如果任何值爲None類型,則將連接值設置爲NaN。我認爲這是由於熊貓如何處理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(拉姆達行:(行[ 'XX']或 '' )+(行['yy']或''),軸= 1)' –
@pneumatics謝謝。在原始數據中,不需要更改原始字段,因爲「無」和空字符串表示不同的含義。有沒有辦法做到這一點,而不改變原始列?謝謝。 – Bin
@Bin嘗試一下,這不會改變'xx'或'yy'列中的值,因爲它們沒有被分配在左側。 'fillna'工作在數據的副本上。 – pneumatics