dataframe多列合併成一列

2021-10-11 01:56:03 字數 4388 閱讀 5412

dataframe的幾列資料合併成為一列

dataframe的幾列資料合併成為一列

1.1 方法歸納

1.2 .str.cat函式詳解

1.2.1 語法格式:

1.2.2 引數說明:

1.2.3 核心功能:

1.2.4 常見範例:

dataframe的幾列資料合併成為一列

1.1 方法歸納

使用 + 直接將多列合併為一列(合併列較少);

使用pandas.series.str.cat方法,將多列合併為一列(合併列較多);

範例如下:

dataframe[

"newcolumn"

]= dataframe[

"age"].

map(str)

+ dataframe[

"phone"

]+ dataframe["address」]

#或者dataframe[

"newcolumn"

]= dataframe[

"age"].

map(str)

.str.

cat(

[dataframe[

"phone"

],dataframe["address」]

],sep=

'-',na_rep=

'?')

注意事項:

參與合併的列的資料型別必須為str型別,int和float等數值型別需先轉化為str;

參與合併的列的長度必須相同(即:行數),否則報錯,但使用pandas.series.str.cat方法,可通過指定引數join=,實現長度不相等的列合併;

參與合併的列的各行元素均不為nan,否則,只要有一列的對應行元素為nan,則合併結果中該行將為nan,但使用pandas.series.str.cat方法,可通過指定引數na_rep=』-』,將各列中缺失行元素填充為『-』,從而保留合併列的所有行元素;

1.2 .str.cat函式詳解

1.2.1 語法格式:

# pandas.series.str.cat語法如下:

series.str.

cat(others=none, sep=none, na_rep=none, join=none)

1.2.2 引數說明:

others : 準備合併的字串列表,其資料型別可以為:series, index, dataframe, np.ndarrary(n元陣列) or list-like(類似列表)

備註: 由於預設join=none,所以欲合併的兩個(多個)字串列表必須具有相同的長度,否則需設定引數join= ,來控制多個字串列表的合併方式。

(1)如果others=none(即:字串列表df[col_1]不與其他字串列表合併),結果將不傳遞其他值,而是將df[col_1]的所有值都連線成乙個字串;(詳見範例1-1)

(2)如果others≠none(即:指定了與字串列表df[col_1]合併的其他字串列表df[col_2]),結果將用分隔符把df[col_1]與df[col_2]對應的行值連線在一起, 返回series。(詳見範例1-2)

sep:合併結果中不同元素/列之間的分隔符。預設情況下,使用空字串』 』 。

na_rep:為所有缺失值插入的內容,其資料型別可以為:str或none,預設na_rep=none

備註:(1)如果na_rep=none,則多個合併列中只要有一列的對應行元素為nan,合併結果中該行元素將為nan;

(2)如果na_rep=『str』(str需自定義),則合併列中各缺失行元素將被填充為『str』,合併結果將保留合併列的所有行元素;

join :確定連線方式,其可能的取值為:,預設join=none

1.2.3 核心功能:

將series中的多個字串[『a』, 『b』, 『c』]拼接為乙個字串』a b c』(字串拼接)

將dataframe中的兩(多)列df[col_1]和df[col_2]合併為一列(多列合併)

備註: pandas.series.str.cat僅適用於str型別的資料,int和float等數值型需先轉化為str型,才可呼叫此方法。

int型轉為str的方法:

1、df[『price』]=df[『price』].map(lambda x: str(x))

2、df[『price』]=df[『price』].map(str)

3、df[『price』]=df[『price』].astype(『str』)

若要同時將多列合併為一列,需引入列表list來指定準備合併的列,例如:

df[col_1].str.cat([df[col_2],df[col_3],df[col_4]],sep=』-』)

1.2.4 常見範例:

import numpy as np

import pandas as pd

#建立原始資料

s=pd.

series([

'a',

'b',np.nan,

'd']

)>>

>

s0 a

1 b

2 nan

3 d

# other=none時,呼叫s.str.cat(),可將series轉為用分隔符sep分隔的字串,缺失項將被省略

s1=s.str.

cat(sep=

' ')

>>

>

s1'a b d'

# other=none時,指定na_rep='?',結果將保留原series中的缺失項,並用?代替

s2=s.str.

cat(sep=

' ',na_rep=

'?')

>>

>

s2'a b ? d'

# other≠none時,呼叫s.str.cat(),可將兩個字串列表df[col_1]與df[col_2]合併為一列,結果用分隔符sep分隔各項元素,由於預設na_rep=none,故合併時若df[col_1]與df[col_2]的對應行元素有乙個為nan,則合併後該行元素值將為none,結果返回series

s3=s.str.

cat(

['a'

,'b'

,'c'

,'d'

],sep=

',')

>>

>

s30 a,a

1 b,b

2 nan

3 d,d

# other≠none時,呼叫s.str.cat(),可將兩個字串列表df[col_1]與df[col_2]合併為一列,指定na_rep='-',故合併結果將保留df[col_1]與df[col_2]的所有行,且將df[col_1]與df[col_2]的缺失項填充為『-』

s4=s.str.

cat(

['a'

,'b'

,'c'

,'d'

],sep=

',',na_rep=

'-')

>>

>

s40 a,a

1 b,b2-

,c3 d,d

# 欲合併的字串列表df[col_1]與df[col_2]的索引不同時,需指定引數join,確定連線方式

t=pd.

series([

'd',

'a',

'e',

'c']

,index=[3

,0,4

,2])

s_1=s.str.

cat(t,join=

'left'

,na_rep=

'-')

>>

>

s_10 aa

1 b-2-c

3 dd

s_2=s.str.

cat(t,join=

'outer'

,na_rep=

'-')

>>

>

s_20 aa

1 b-2-c

3 dd4-e

s_3=s.str.

cat(t,join=

'inner'

,na_rep=

'-')

>>

>

s_30 aa2-c

3 dd

s_4=s.str.

cat(t,join=

'right'

,na_rep=

'-')

>>

>

s_43 dd

0 aa4-e

2-c

oracle 將多列資料合併成一列顯示

將多列資料合併成一列資料顯示 方法一 執行update語句,之後select 出來,這個不是本次的重點 方法二 不執行update語句,直接select出來的時候就顯示了,但是不改變表結構和資料 a 若合併的資料只是簡單的將字串拼接的話,就要看即將合併的兩列是不是varchar2格式 如不是,sql...

特殊sql 一 (例 多列合併成一列)

sql view plain copy print?select from biz shop select shop sid,shop name,biz catalog,city code from biz shop 兩條語句 作用相同 但是第二條 效率略高於第一天 在資料庫內部 第一條轉第二條在進...

dataframe一列拆分成多列 split

假設某一列資料報含多個資訊或乙個字串 id attrs a 1,2,5,3 b 3,1,2,5 c 1,2,0,3 d 1,7,5,3 e 2,1,6,8 我們想把他拆分成多列,做法如下 首先進行拆分 data df data df attrs str.split expand true 然後用pd...