2017-08-10 82 views
-3

我有一個包含整數和字符串的列的熊貓數據框。將字符串(來自也包含整數的熊貓數據幀列)轉換爲整數

我想保留整數,並只使用int.from_bytes方法將該列的字符串轉換爲整數。這可能嗎?

你會建議的其他方式嗎?

我需要總是將出現在此列中的任何字符串(通常是最多3個字符的字符串)轉換爲相同的唯一整數。謝謝。

編輯:

道歉已故答​​復和混亂的問題。其實我嘗試了各種不起作用的東西,但我的問題肯定不夠清楚。爲了說明這個問題,首先要考慮的是,你可以用下面的代碼轉換字符的字符串轉換成整數:

int.from_bytes(bytearray('CD', 'ascii'), byteorder='big', signed=False) 

其中,「CD」是我要轉換成整數的字符串。在這種情況下,'CD'被轉換爲int 17220.'C2'將被轉換爲17202.

在我的情況中,我有一個包含整數和字符串的列。字符串通常是2或3個字符串,例如上面提到的字符串。我想要轉換此列,保留整數,然後使用上述方法將字符串轉換爲整數。因此,例如一列[1,'CD',2,'C2']應該被轉換爲[1,17220,2,17202]。

從@AlexanderMcFarlane的答案,我設法找到了這樣一個解決方案:

import re 
regex = re.compile(r"[-+]?\d+(\.0*)?$") 

def is_int(v): 
    return regex.match(str(v).strip()) is not None 

def string_int(x): 
    if is_int(x): 
     return int(float(x)) 
    else: 
     return int.from_bytes(bytearray(x, 'ascii'), byteorder='big', signed=False) 

x = [1, 'CD', 2, 'C2', '5'] 
df = pd.DataFrame(x, columns=['col']) 

In: df 
Out:  col 
    0 1 
    1 CD 
    2 2 
    3 C2 
    4 5 

In: df['col']=df['col'].apply(string_int) 
    df 
Out:  col 
    0 1 
    1 17220 
    2 2 
    3 17202 
    4 5 

我會感謝您的反饋。和許多感謝@AlexanderMcFarlane

+0

樣本數據,輸出操作,你嘗試過這麼遠嗎? – Zero

+0

請向我們展示您的努力! SO不是一種編碼服務,但我們'都'願意提供幫助。並且最後舉一個例子說明你有什麼和想要什麼,以便我們更好地理解這個問題。然後你可能會得到你想要的答案。 –

+0

@MarvinTaschenberger我認爲這是相當明顯的 –

回答

0

使用這些功能

import re 
regex = re.compile(r"[-+]?\d+(\.0*)?$") 

def is_int(v): 
    return regex.match(str(v).strip()) is not None 

def safe_int(x): 
    if is_int(x): 
     return int(float(x)) 
    else: 
     return x 

然後在

df[column] = df[column].apply(safe_int) 

In [17]: map(safe_int, ['1.0', '1', 's', '23546.fdf']) 
Out[17]: [1, 1, 's', '23546.fdf'] 
+0

我每天使用這個確切的邏輯來將數百萬個字符串轉換爲整數 - 因此downvote並不反映正確性 –

+0

我的猜測是downvoter不喜歡你的假設回答。例如,有不能在列中轉換爲整數的字符串,或者OP希望將這些無效字符串保留爲列中的字符串(這些細節當前不可能基於OP的問題模糊性來確定)。因爲如果這些假設不是這種情況,他們可能會逃避一些簡單的事情。 – miradulo

+0

是的沒有後顧之憂我只是想澄清這是轉換的絕對萬無一失的方法,看到了一個機會展示我的寶貝,並幫助別人:) –

相關問題