my_df = pd.DataFrame(data = { 'col0': ['1%2%', '3%4%'], 'col1': [np.nan, np.nan], 'col2': [' 1-2', ' 2-4'], 'col3': [np.nan, ' 2-4'], 'col4': [np.nan, np.nan] })
my_df[['col0a', 'col0b']] = my_df['col0'].fillna('%').str.split('%', expand = True).iloc[:, 0:2]
my_df[['col1a', 'col1b']] = my_df['col1'].fillna('%').str.split('%', expand = True).iloc[:, 0:2]
my_df[['col2a', 'col2b']] = my_df['col2'].str.split('(?<=[\d]|K)(?=[ -])', expand=True)
my_df[['col3a', 'col3b']] = my_df['col3'].str.split('(?<=[\d]|K)(?=[ -])', expand=True)
my_df[['col4a', 'col4b']] = my_df['col4'].str.split('(?<=[\d]|K)(?=[ -])', expand=True)
my_df
my_df[['col4a', 'col4b']]由于整個列都是NaN值,這會在行上引發錯誤。對于col1,沒有拋出錯誤,因為我們填充了%,然后拆分會拆分%為兩列空字串,這正是我們想要的。
我們fillna()可以添加什么col4使其不會引發錯誤?col4 的拆分比 col1 的拆分更復雜(尋找 #-# 的模式)。我們已經試過了,fillna(' -')但這不起作用。在一般情況下,我們正在尋找輸出空字串的解決方案col4a,并col4b在col4有NaN其價值。
編輯:措辭不同,我需要一個用于 fillna 的字串,當傳遞給 時.split('(?<=[\d]|K)(?=[ -])', expand=True),會產生 2 個空字串,盡管也許我可以用類似的東西fillna( 9999-9999)替換,然后用空字串替換 9999...
uj5u.com熱心網友回復:
一個(可能)更好的解決方案是使用.str.extract而不是.str.split,這更適合您的目的:
my_df = pd.DataFrame(data = { 'col0': ['1%2%', '3%4%'], 'col1': [np.nan, np.nan], 'col2': [' 1-2', ' 2-4'], 'col3': [np.nan, ' 2-4'], 'col4': [np.nan, np.nan] })
my_df = my_df.fillna('')
pat1 = r'(\d %)(\d %)'
pat2 = r'([ -](?:[\d] |K))([ -](?:[\d] |K))'
my_df[['col0a', 'col0b']] = my_df['col0'].str.extract(pat1)
my_df[['col1a', 'col1b']] = my_df['col1'].str.extract(pat1)
my_df[['col2a', 'col2b']] = my_df['col2'].str.extract(pat2)
my_df[['col3a', 'col3b']] = my_df['col3'].str.extract(pat2)
my_df[['col4a', 'col4b']] = my_df['col4'].str.extract(pat2)
my_df = my_df.fillna('')
輸出:
>>> my_df
col0 col1 col2 col3 col4 col0a col0b col1a col1b col2a col2b col3a col3b col4a col4b
0 1%2% 1-2 1% 2% 1 -2
1 3%4% 2-4 2-4 3% 4% 2 -4 2 -4
uj5u.com熱心網友回復:
不完美,但是這個 2 行解決方案比我當前使用 if: else: 塊的 8 行解決方案更好。
my_df[['col4a', 'col4b']] = my_df['col4'].fillna(' 999999-999999').str.split('(?<=[\d]|K)(?=[ -])', expand=True)
my_df[['col4a', 'col4b']] = my_df[['col4a', 'col4b']].replace(' 999999', '').replace('-999999', '')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/390543.html
上一篇:Numba沒有提高性能
