我有包含例如數據幀:Python的大熊貓:在一個字符串中刪除一個分隔符之後的一切
"vendor a::ProductA"
"vendor b::ProductA
"vendor a::Productb"
我需要讓我最終刪除一切(含)兩個:::
"vendor a"
"vendor b"
"vendor a"
我試過str.trim(這似乎不存在)和str.split沒有成功。 什麼是最簡單的方法來完成這個?
我有包含例如數據幀:Python的大熊貓:在一個字符串中刪除一個分隔符之後的一切
"vendor a::ProductA"
"vendor b::ProductA
"vendor a::Productb"
我需要讓我最終刪除一切(含)兩個:::
"vendor a"
"vendor b"
"vendor a"
我試過str.trim(這似乎不存在)和str.split沒有成功。 什麼是最簡單的方法來完成這個?
您可以使用pandas.Series.str.split
就像你會使用split
正常。剛上線'::'
和索引拆分是一個從split
方法創建的列表:
>>> df = pd.DataFrame({'text': ["vendor a::ProductA", "vendor b::ProductA", "vendor a::Productb"]})
>>> df
text
0 vendor a::ProductA
1 vendor b::ProductA
2 vendor a::Productb
>>> df['text_new'] = df['text'].str.split('::').str[0]
>>> df
text text_new
0 vendor a::ProductA vendor a
1 vendor b::ProductA vendor b
2 vendor a::Productb vendor a
這裏有一個非大熊貓的解決方案:
>>> df['text_new1'] = [x.split('::')[0] for x in df['text']]
>>> df
text text_new text_new1
0 vendor a::ProductA vendor a vendor a
1 vendor b::ProductA vendor b vendor b
2 vendor a::Productb vendor a vendor a
編輯:下面是的一步一步的解釋正在發生的事情pandas
以上:
# Select the pandas.Series object you want
>>> df['text']
0 vendor a::ProductA
1 vendor b::ProductA
2 vendor a::Productb
Name: text, dtype: object
# using pandas.Series.str allows us to implement "normal" string methods
# (like split) on a Series
>>> df['text'].str
<pandas.core.strings.StringMethods object at 0x110af4e48>
# Now we can use the split method to split on our '::' string. You'll see that
# a Series of lists is returned (just like what you'd see outside of pandas)
>>> df['text'].str.split('::')
0 [vendor a, ProductA]
1 [vendor b, ProductA]
2 [vendor a, Productb]
Name: text, dtype: object
# using the pandas.Series.str method, again, we will be able to index through
# the lists returned in the previous step
>>> df['text'].str.split('::').str
<pandas.core.strings.StringMethods object at 0x110b254a8>
# now we can grab the first item in each list above for our desired output
>>> df['text'].str.split('::').str[0]
0 vendor a
1 vendor b
2 vendor a
Name: text, dtype: object
我建議檢查出pandas.Series.str docs,或者更好的,Working with Text Data in pandas。
您可以使用str.replace(「:」,「」)刪除「::」。 要分割,需要指定要分割的字符:str.split(「」) 修剪功能在python中稱爲strip:str.strip()
此外,您可以執行str [: 7]在你的字符串中獲得「供應商x」。
好運
由於供應商名稱的長度不同,因此無法執行str [:7] – f0rd42
有你的函數:
def do_it(str):
integer=0
while integer<len(str):
if str[integer]==':' :
if str[integer+1]==':' :
str=str.split(':')[0]
break;
integer=integer+1
return (str)
傳遞原始字符串在那裏。並獲得新的修剪的字符串。
是不是很複雜? – f0rd42
對不起,你可以擺脫兩個if語句並在str.split()函數中傳遞'::'。 –
'str.split'可以做到 - 你是怎麼嘗試的? –