日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

pandas删除行删除列,增加行增加列

發(fā)布時(shí)間:2024/1/8 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pandas删除行删除列,增加行增加列 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

舉例:創(chuàng)建一個(gè)新df:

df = pd.DataFrame(np.arange(16).reshape(4, 4), columns=list('ABCD'), index=list('1234'))dfA 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

通過(guò)行名稱刪除:

df = df.drop(['1', '2']) # 不指定axis默認(rèn)為0 df.drop(['1', '3'], inplace=True)

通過(guò)行號(hào)刪除:

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,通過(guò)各種篩選方法實(shí)現(xiàn)刪除行

詳見(jiàn)pandas“選擇行單元格,選擇行列“的筆記

舉例,通過(guò)篩選可以實(shí)現(xiàn)很多功能,例如某列數(shù)據(jù)有重復(fù),我們需要對(duì)某列數(shù)據(jù)去重(刪除行),可以獲取去重后的index列表后,使用loc方法:

>>> df.loc['2','B']=9 >>> dfA 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列,會(huì)就地修改

2.2,drop

通過(guò)列名稱刪除:

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

使用列數(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,通過(guò)各種篩選方法實(shí)現(xiàn)刪除列

詳見(jià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會(huì)被取消

3.2,append

添加有name的Series:

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

添加沒(méi)有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,逐行增加

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

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

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

3.4,插入行

增加行沒(méi)找到類(lèi)似insert這種可以插入的方法,暫時(shí)替代方法可以先reindex,再賦值:

df = df.reindex(index=df.index.insert(2, '5')) df.loc['5'] = [16, 17, 18, 19]

4,df增加列

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

例如,想增加一列'E',值等于'A'和'C'列對(duì)應(yīng)值之和。

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

s = [a + c for a, c in zip(df['A'], df['C'])] # 通過(guò)遍歷獲取序列 s = [row['A'] + row['C'] for i, row in df.iterrows()] # 通過(guò)iterrows()獲取序列,s為list s = df.apply(lambda row: row['A'] + row['C'], axis=1) # 通過(guò)apply獲取序列,s為Series s = df['A'] + df['C'] # 通過(guò)Series矢量相加獲取序列 s = df['A'].values + df['C'].values # 通過(guò)Numpy矢量相加獲取序列

4.2,[ ],loc

通過(guò)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遍歷過(guò)程中給列賦值

效率比較低

df['E']是DataFrame的一個(gè)Series,是引用,對(duì)其修改也能改變DataFrame,但運(yùn)行時(shí)報(bào)了Warning:

df['E'] = None # 需事先創(chuàng)建e列,否則iloc遍歷會(huì)報(bào)錯(cuò),loc遍歷無(wú)需事先創(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不會(huì)報(bào)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無(wú)需先給E列賦空值:

for i in df.index:df.loc[i, 'E'] = df.loc[i, 'A'] + df.loc[i, 'C']

4.6,逐列增加

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

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

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

4.7,其他方法

?增加3列,EFG,value默認(rèn)為np.NaN

df = pd.concat([df, pd.DataFrame(columns=list('EFG'))]) # 列的次序無(wú)法指定,并且fillna時(shí)會(huì)對(duì)整個(gè)df做出調(diào)整 df = df.reindex(columns=list('ABCDEFG'), fill_value=0) # 列的次序按照l(shuí)ist指定,并且fill_value只對(duì)新增列做出調(diào)整,推薦!

總結(jié)

以上是生活随笔為你收集整理的pandas删除行删除列,增加行增加列的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。