溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用pandas怎么刪除行或刪除列

發(fā)布時間:2021-05-12 18:07:42 來源:億速云 閱讀:14792 作者:Leah 欄目:開發(fā)技術(shù)

今天就跟大家聊聊有關(guān)使用pandas怎么刪除行或刪除列,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)建df:

>>> df = pd.DataFrame(np.arange(16).reshape(4, 4), columns=list('ABCD'), index=list('1234'))

>>> df

  A  B  C  D

1  0  1  2  3

2  4  5  6  7

3  8  9 10 11

4 12 13 14 15

1,刪除行

1.1,drop

通過行名稱刪除:

df = df.drop(['1', '2'])      # 不指定axis默認為0

df.drop(['1', '3'], inplace=True)

通過行號刪除:

df.drop(df.index[0], inplace=True)    # 刪除第1行
df.drop(df.index[0:3], inplace=True)   # 刪除前3行
df.drop(df.index[[0, 2]], inplace=True) # 刪除第1第3行

1.2,通過各種篩選方法實現(xiàn)刪除行

詳見pandas“選擇行單元格,選擇行列“的筆記

舉例,通過篩選可以實現(xiàn)很多功能,例如要對某行數(shù)據(jù)去重,可以獲取去重后的index列表后,使用loc方法:

>>> df.loc['2','B']=9

>>> df

  A  B  C  D

1  0  1  2  3

2  4  9  6  7

3  8  9 10 11

4 12 13 14 15

>>> chooses = df['B'].drop_duplicates().index

>>> df.loc[chooses]

  A  B  C  D

1  0  1  2  3

2  4  9  6  7

4 12 13 14 15

2,刪除列

2.1,del

del df['A'] # 刪除A列,會就地修改

2.2,drop

通過列名稱刪除:

df = df.drop(['B', 'C'], axis=1)        # drop不會就地修改,創(chuàng)建副本返回

df.drop(['B', 'C'], axis=1, inplace=True)   # inplace=True會就地修改

使用列數(shù)刪除,傳入?yún)?shù)是int,列表,者切片: 

df.drop(df.columns[0], axis=1, inplace=True)    # 刪除第1列

df.drop(df.columns[0:3], axis=1, inplace=True)   # 刪除前3列

df.drop(df.columns[[0, 2]], axis=1, inplace=True) # 刪除第1第3列

2.3,通過各種篩選方法實現(xiàn)刪除列

詳見pandas“選擇行單元格,選擇行列“的筆記

3,增加行

3.1,loc,at,set_value

想增加一行,行名稱為‘5',內(nèi)容為[16, 17, 18, 19]

df.loc['5'] = [16, 17, 18, 19]  # 后面的序列是Iterable就行

df.at['5'] = [16, 17, 18, 19]

df.set_value('5', df.columns, [16, 17, 18, 19], takeable=False)  # warning,set_value會被取消

3.2,append

添加有name的Series:

s = pd.Series([16, 17, 18, 19], index=df.columns, name='5')

df = df.append(s)

添加沒有name的Series,必須ignore_index:

s = pd.Series([16, 17, 18, 19], index=df.columns)

df = df.append(s, ignore_index=True) 

可以 append字典列表,同樣需要必須ignore_index:

ls = [{'A': 16, 'B': 17, 'C': 18, 'D': 19}, {'A': 20, 'B': 21, 'C': 22, 'D': 23}]

df = df.append(ls, ignore_index=True)

3.3,逐行增加

簡單的逐行添加內(nèi)容,可以:

df.loc[len(df)] = [16, 17, 18, 19]

但需要注意:len(df)生成的是int,如果生成的int,df已經(jīng)存在了,會覆蓋該行數(shù)據(jù),而不會新增

3.4,插入行

增加行沒找到類似insert這種可以插入的方法,暫時替代方法可以先reindex,再賦值: 

df = df.reindex(index=df.index.insert(2, '5'))

df.loc['5'] = [16, 17, 18, 19]

4,df增加列

一般涉及到增加列項時,經(jīng)常會對現(xiàn)有的數(shù)據(jù)進行遍歷運算,獲得新增列項的值,所以這里結(jié)合對DataFrame的遍歷討論增加列。

例如,想增加一列'E',值等于'A'和'C'列對應值之和。

4.1,遍歷DataFrame獲取序列的方法

s = [a + c for a, c in zip(df['A'], df['C'])]     # 通過遍歷獲取序列

s = [row['A'] + row['C'] for i, row in df.iterrows()] # 通過iterrows()獲取序列,s為list

s = df.apply(lambda row: row['A'] + row['C'], axis=1) # 通過apply獲取序列,s為Series

s = df['A'] + df['C']                 # 通過Series矢量相加獲取序列

s = df['A'].values + df['C'].values          # 通過Numpy矢量相加獲取序列

4.2,[ ],loc

通過df[]或者df.loc添加序列

df.loc[:, 'E'] = s

df['E'] = s

4.3,Insert

可以指定插入位置,和插入列名稱

df.insert(0, 'E', s)

4.4,concat

s = pd.Series([16, 17, 18, 19], name='E', index=df.index)
df = pd.concat([df, s], axis=1)

4.5,iloc和loc遍歷過程中給列賦值

效率比較低

df['E']是DataFrame的一個Series,是引用,對其修改也能改變DataFrame,但運行時報了Warning

df['E'] = None # 需事先創(chuàng)建e列,否則iloc遍歷會報錯,loc遍歷無需事先創(chuàng)建

for i in range(len(df)):

  df['E'].iloc[i] = df['A'].iloc[i] + df['C'].iloc[i] 

# SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame

不用Series不會報Warning:

df['E'] = None

col_no = [i for i in df.columns].index('E') 

for i in range(len(df)):

  df.iloc[i, col_no] = df['A'].iloc[i] + df['C'].iloc[i]

用loc無需先給E列賦空值:

for i in df.index:

  df.loc[i, 'E'] = df.loc[i, 'A'] + df.loc[i, 'C']

4.6,逐列增加

簡單的逐列添加內(nèi)容,可以:

df[len(df)] = [16, 17, 18, 19]

但需要注意:len(df)生成的是int,如果生成的int,df已經(jīng)存在了,會覆蓋該列數(shù)據(jù),而不會新增

4.7,其他方法

增加3列,EFG,value默認為np.NaN

df = pd.concat([df, pd.DataFrame(columns=list('EFG'))])  # 列的次序無法指定,并且fillna時會對整個df做出調(diào)整

df = df.reindex(columns=list('ABCDEFG'), fill_value=0)  # 列的次序按照list指定,并且fill_value只對新增列做出調(diào)整,推薦!

看完上述內(nèi)容,你們對使用pandas怎么刪除行或刪除列有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI