常見的需求是將某一列根據指定的分隔符拆分成多列。現有需求,根據指定的分隔符將其拆分為多行。
例:
df =a b0 a f
1b;c h;g
2d k
3 e l
現需要將其拆分為:
df =a b0 a f
1b h
1c g
2d k
3 e l
實現過程如下:
df = pd.dataframe()df
a b0 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()df2 = 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
df2out[10]:
name age0 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...