所以,我想通過從 Column1 中獲取前 3 個字母和從 column2 中獲取前 4 個字母以及來自 column3 的所有 4 個數字并將它們存盤在 column4 中來連接熊貓中的三列,但是只要在第 1、2 或 3 列中的一個中存在 Nan,我希望輸出為 Nan 或 Blank 如下所示。即使字母較少,也可以連接,但即使有一個 Nan 也不要。
Column1 Column2 Column3 Column4
Abcdef cdefg 1996 ABC|CDEF|1996
ab wer 1998 AB|WER|1998
ab NaN 1998 NaN/Blank
NaN NaN 2000 NaN/Blank
abcd weet NaN NaN/Blank
qwwer ram2e 12345 QWW|RAM2|1234
我嘗試了以下代碼,但它非常基本并且沒有提供所需的輸出。請提出更好的替代方案。謝謝。
df1['column4'] = df1['column1'].str[:3] df1['column2'].str[:4] df1['column3'].map(str)
uj5u.com熱心網友回復:
您可以使用替換nan將值連接到None數值中的列,也可以在最后洗掉.0:
df1['column4'] = (df1['Column1'].str[:3].str.upper() '|'
df1['Column2'].str[:4].str.upper() '|'
df1['Column3'].astype(str).replace({'^nan$':None, '\.0$':''}, regex=True))
print (df1)
Column1 Column2 Column3 Column4 column4
0 Abcdef cdefg 1996.0 ABC|CDEF|1996 ABC|CDEF|1996
1 ab wer 1998.0 AB|WER|1998 AB|WER|1998
2 ab NaN 1998.0 NaN/Blank NaN
3 NaN NaN 2000.0 NaN/Blank NaN
4 abcd weet NaN NaN/Blank NaN
5 qwwer ram2e 12345.0 QWW|RAM2|1234 QWW|RAM2|12345
uj5u.com熱心網友回復:
像這樣連接應該可以作業。任何 NaN 列都應該導致 Column4 也有 NaN。
df['Column4'] = df['Column1'].str[:3].str.upper() '|' df['Column2'].str[:4].str.upper() '|' df['Column3'].str[:4].str.upper()
uj5u.com熱心網友回復:
在我看來,您走對了路,我不明白您的輸出有什么問題,但這可能是因為 column3 存盤為浮點數。看到這個代碼:
data1 = {'column1': ['Abcdef', 'ab', 'ab', np.nan, 'abdc', 'qwwer'], 'column2': ['cdefg', 'wer', np.nan, np.nan, 'weet' , 'ram2e'], 'column3': [1996, 1998, 1998, 2000, np.nan, 12345]}
df1 = pd.DataFrame(data1)
df1['column3'] = df1['column3'].astype(str).replace('\.0', '', regex=True)
df1['column4'] = df1['column1'].str[:3] df1['column2'].str[:4] df1['column3']
print(df1)
輸出:
column1 column2 column3 column4
0 Abcdef cdefg 1996 Abccdef1996
1 ab wer 1998 abwer1998
2 ab NaN 1998 NaN
3 NaN NaN 2000 NaN
4 abdc weet nan abdweetnan
5 qwwer ram2e 12345 qwwram212345
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/353677.html
上一篇:使用標題和文本創建資料框
下一篇:Pandas中的日期時間列名稱
