Pandas使用實用技巧

2022-08-30 00:21:12 字數 3808 閱讀 6530

常見的需求是將某一列根據指定的分隔符拆分成多列。現有需求,根據指定的分隔符將其拆分為多行

例:

df =a       b

0 a f

1b;c h;g

2d k

3 e l

現需要將其拆分為:

df =a       b

0 a f

1b h

1c g

2d k

3 e l

實現過程如下:

df = pd.dataframe()

df

a    b

0 a f

1b;c h;j

2d k

3 e l

將a列按照「;」分割,並展開為dataframe,該效果由expand引數空值:

df_a = df['

a'].str.split('

;', expand=true)

df_a

0 10 a none

1b c

2d none

3 e none

將df_a進行堆積:

df_a =df_a.stack()

df_a

0 0 a

10 b

1c20 d

30 e

dtype: object

將內層索引重置為列並刪除掉:

df_a = df_a.reset_index(level=1, drop=true)

df_a

0 a

1b1c

2d3e

dtype: object

重新命名該series,否則接下來合併會失敗:

df_a.rename('

a_split

', inplace=true)

df_a

0 a

1b1c

2d3e

name: a_split, dtype: object

處理過程同列a,最後重新命名後為:

df_b.rename('

b_split

', inplace=true)

df_b

0 f

1h1j

2k3l

name: b_split, dtype: object

水平合併處理完成後的兩列:

concat_a_b = pd.concat([df_a, df_b], axis=1)

concat_a_b

a_split b_split

0 a     f

1b      h

1c     j

2d     k

3 e      l

將最終處理的資料和原資料根據索引進行合併:

df = df.join(concat_a_b, how='

inner')

df   a   b a_split b_split

0 a   f a f

1b;c h;j b h

1b;c h;j c j

2d k d k

3 e l e l

最後達到了想要的效果。

常見的需求是在指定的位置插入一行或者一列。現有需求,在指定的位置插入多行或者多列:

df = pd.dataframe()

dfout[4]:

name age

0 tom 28

1 jack 34

2 steve 29

3 ricky 42df1 = pd.dataframe()

df1out[6]:

name age

0 anna 20

1 susie 50

df2 = pd.dataframe()

df2out[10]:

name  age

0 anna 20

1 susie 50

2 jhone 35

通過numpy的insert方法實現陣列重構,然後再將陣列構造成需要的**:

np.insert(df.values, 2, df1.values, axis=0)

out[7]:

array([[

'tom

', 28],

['jack

', 34],

['anna

', 20],

['susie

', 50],

['steve

', 29],

['ricky

', 42]], dtype=object)

可以觀察到資料被插入到df索引2的位置。可以根據原來的列名直接構造dataframe來實現需求:

pd.dataframe(np.insert(df.values, 2, df1.values, axis=0), columns=df.columns)

out[8]:

name age

0 tom 28

1 jack 34

2 anna 20

3 susie 50

4 steve 29

5 ricky 42

通過numpy的insert方法實現陣列重構,然後再將陣列構造成需要的**:

np.insert(df.values, (0, 1, 2), df2.values, axis=0)

out[12]:

array([[

'anna

', 20],

['tom

', 28],

['susie

', 50],

['jack

', 34],

['jhone

', 35],

['steve

', 29],

['ricky

', 42]], dtype=object)

可以觀察到資料被插入到df索引0、1、2的位置。可以根據原來的列名直接構造dataframe來實現需求:

pd.dataframe(np.insert(df.values, (0, 1, 2), df2.values, axis=0), columns=df.columns)

out[13]:

name age

0 anna 20

1 tom 28

2 susie 50

3 jack 34

4 jhone 35

5 steve 29

6 ricky 42

Linux 實用技巧

值得一提的是vim是慈善軟體 charityware 如有贊助或評比得獎,所得將全部救助烏干達孤兒,軟體使用是免費的,歡迎手頭有點閒錢的使用者捐款贊助,如果沒銀子也沒關係,至少當有評比活動時 有獎金可拿的那種 應用技巧一 快速注釋 1 連續行注釋 使用vim vi編輯shell指令碼,在進行除錯的時...

vim實用技巧

以前習慣於eclipse,sourceinsight,vim用的不是很熟悉,在現在的公司中,vim是一種必備的技巧,慢慢,從難受到得心應手,vim還是比較好用的,下面記錄一點實用的技巧 1 vim ctags cscope是乙個強大的比擬於sourceinsight的字元介面的工具 2 ctrl 跳...

SQL PowerDesigner實用技巧

1,name code的轉變 我們設計資料庫的時候,軟體會自動把name的資料複製到code中,但我想設計時直接把 欄位名稱與含義寫在name中,這樣對設計時間的浪費是很少的 如我們以 欄位名 中文含義 來寫name,讓軟體自動複製前面的 欄位名到 code中.讓中文函義 自動複製到 comment...