2017-07-07 91 views
1

我導入了一個表,每個教練擔任足球教練的年份。一些上市多年的是這樣的: 「1903年至1910年,1917年,1919年」蟒蛇分裂不承認連字符

我的目標爲[1903,1904,1905年,1906年,1907年,1908年,1909年,1910年,1917年,1919年]

在我原來的DataFrame中,這個列表是一個對象。

我曾嘗試:

x = "1903–1910, 1917, 1919"

x[0].split('-')

re.split(r'\s|-', x[0])

x[0].replace('-', ' ').split(' ')

我不斷收到:

['1903–1910']

我在做什麼錯?爲什麼python找不到連字符?

+0

是年份字符串嗎? –

+2

在第二次嘗試中,'x [0]'是單個字符,所以'x [0] .split(' - ')'與'''split(' - ')'相同。根據你的目標,你應該先用逗號分割,然後在每個結果中用連字符分割。 –

+0

@SciProg在某些方面他所有的嘗試 –

回答

3

你看到的連字符不是連字符。它可能是一些其他角色,就像一個unicode en-dash,看起來非常相似。

嘗試將實際字符複製粘貼到拆分字符串中。

看您發佈的文字,這裏的區別:

➜ ~ echo '1903–1910' | xxd 
00000000: 3139 3033 e280 9331 3931 300a   1903...1910. 
➜ ~ echo '1903-1910' | xxd 
00000000: 3139 3033 2d31 3931 300a     1903-1910. 

在第一種情況的特點是:https://unicode-table.com/en/2013/

+0

謝謝。這讓我瘋狂。 – Jackie

1

你的性格是不是hyfen,這是一個破折號:

>>> "–" == "-" 
False 
>>> x = "1903–1910, 1917, 1919" 
>>> x.split("–") 
['1903', '1910, 1917, 1919'] 
+1

謝謝。錯過這是我得到的重點是森林而不是樹木。 – Jackie

0

此功能但不是最佳

# -*- coding: utf-8 -*- 
x = "1903–1910, 1917, 1919" 
endash = '–' 
years = x.split(', ') 
new_list = [] 
for year in years: 
    if endash in year: 
     start, finish = year.split(endash) 
     new_list.extend(range(int(start), int(finish)+1)) 
    else: 
     new_list.append(int(year)) 
print new_list 

輸出:[1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1917, 1919]

+0

@Jackie你可以試試這個解決方案 - 它應該可以解決你的終極問題 –

+0

感謝您的幫助! – Jackie

+0

剛完成修復我的數據框和您的解決方案來非常有用。 – Jackie