3 回答

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個贊
您遇到的問題與列和索引是pd.Index對象這一事實(shí)有關(guān)。pandas Index的fillna方法采用的參數(shù)與pandas Series或DataFrame的fillna方法采用的參數(shù)不同。我在下面做了一個玩具示例:
import pandas as pd
import numpy as np
df = pd.DataFrame(
{'a':[1], 'Unnamed:1':[1], 'Unnamed:2':[1], 'b':[1], 'Unnamed:3':[1]},
columns=['a', 'Unnamed:3', 'Unnamed:1', 'b', 'Unnamed:2']))
df
# a Unnamed:3 Unnamed:1 b Unnamed:2
#0 1 1 1 1 1
您原始的正則表達(dá)式無法捕獲整個列名,我們來解決這個問題。
df.columns.str.replace('Unnamed:*', '')
#Index(['a', '3', '1', 'b', '2'], dtype='object')
df.columns.str.replace('Unnamed:\d+', '')
#Index(['a', '', '', 'b', ''], dtype='object')
df.columns.str.replace('Unnamed:.+', '')
#Index(['a', '', '', 'b', ''], dtype='object')
現(xiàn)在,讓我們將索引轉(zhuǎn)換為一系列,以便我們可以使用和的一個正則表達(dá)式的.replace和.fillna方法,pd.Series將相關(guān)的列名替換為ffill。最后,我們將其轉(zhuǎn)換為pd.Index
pd.Index(
pd.Series(
df.columns
).replace('Unnamed:\d+', np.nan, regex=True).fillna(method='ffill')
)
#Index(['a', 'a', 'a', 'b', 'b'], dtype='object')
df.columns = pd.Index(pd.Series(df.columns).replace('Unnamed:\d+', np.nan, regex=True).fillna(method='ffill'))
df.head()
# a a a b b
#0 1 1 1 1 1
添加回答
舉報