我有以下資料框:
# initialize list of lists
data = [['1', "Tag1, Tag323, Tag36"], ['2', "Tag11, Tag212"], ['4', "Tag1, Tag12, Tag3, Tag324"]]
# Create the pandas DataFrame
df = pd.DataFrame(data, columns = ['ID', 'Tag'])
print(df)
ID Tag
1 Tag1, Tag323, Tag36
2 Tag11, Tag212
4 Tag1, Tag12, Tag3, Tag324
我想使用以下條件操作"Tag1, Tag2, Tag3"列中的字串值(例如) 。tag在每一行中,如果有超過 2 個標簽,則輸出應如下所示"Tag1, Tag2 .."。標簽長度可以不同。
print(df)
ID Tag
1 Tag1, Tag323 ..
2 Tag11, Tag212
4 Tag1, Tag12 ..
有誰知道 Pandas 應用和 lambda 方法來解決這個問題?
uj5u.com熱心網友回復:
想法是拆分標簽Series.str.split,如果長度更大,例如N選擇第一個N值并加入:
N = 2
s = df['Tag'].str.split(",")
df['Tag'] = df['Tag'].mask(s.str.len().gt(N), s.str[:N].str.join(",") "...")
print (df)
ID Tag
0 1 Tag1, Tag323...
1 2 Tag11, Tag212
2 4 Tag1, Tag12...
解決方案apply:
N = 2
df['Tag'] = df['Tag'].apply(lambda x: ', '.join(x.split(',')[:N]) '...'
if x.count(',') 1 > N else x)
或者:
N = 2
df['Tag'] = df['Tag'].mask(df['Tag'].str.count(',').gt(N),
df['Tag'].apply(lambda x: ', '.join(x.split(',')[:N]) '...'))
uj5u.com熱心網友回復:
len_ = len('Tag1, Tag2, Tag3')
df['Tag'] = [x if len(x)<len_ else "Tag1, Tag2 .." for x in df['Tag'] ]
您可以選擇自己的長度。
輸出:
ID Tag
0 1 Tag1, Tag2 ..
1 2 Tag1, Tag2
2 4 Tag1, Tag2 ..
uj5u.com熱心網友回復:
我會按照以下方式進行
import re
import pandas as pd
data = [['1', "Tag1, Tag323, Tag36"], ['2', "Tag11, Tag212"], ['4', "Tag1, Tag12, Tag3, Tag324"]]
df = pd.DataFrame(data, columns = ['ID', 'Tag'])
def shorten(text):
return re.sub(r'(\S ,\s \S ),\s \S .*', r'\1..', text)
df['Tag'] = df['Tag'].apply(shorten)
print(df)
給出輸出
ID Tag
0 1 Tag1, Tag323..
1 2 Tag11, Tag212
2 4 Tag1, Tag12..
說明:我使用re.sub帶有捕獲組的函式,符號的含義如下:(... )- 捕獲組\S- 非空白字符\s- 空白字符 - 一個或多個重復.- 零個或多個重復.- 任何字符,,- 文字逗號。如果找到的文本確實包含正則運算式,即至少 3 個非空白運行,則將其替換為兩個第一個運行以及它們之間的兩個點處的內容,其他文本不受影響。
uj5u.com熱心網友回復:
只需使用這個簡單的代碼:
for i in df.Tag:
a = i.split(",")
if len(a)>2:
b = a[0:2]
c = ",".join(b) ".."
df["Tag"] = c
uj5u.com熱心網友回復:
ol'split和joinMethods 可能只在這里作業。我將在下面撰寫整個函式,但這也可以轉換為 lambda 函式
def tag_splitter(text):
split_text = text.split(',')
if len(split_text) > 2:
return ','.join(split_text[:2]) '..'
return ','.join(split_text)
完成后,apply這個到你的專欄(比如df[‘tag’].apply(tag_splitter))
此外,引號在我的螢屏上顯示錯誤(但我目前無法更改它們)。確保使用正確的單引號
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/531132.html
上一篇:自動附加的字串回圈
