2017-06-29 64 views
0

這可能是一個非常簡單的問題,但我很感謝幫助!定義函數將字符串轉換爲Python中的整數

作爲一個更大的腳本的一部分,我有一個數據框(從csv文件導入),包含兩列'file_name'和'value'。我具有低於短例如:

  file_name value 
0 201623800811s.fits True 
1 201623802491s.fits True 
2 201623802451s.fits False 

我想定義一個函數,它讀取列「值」內的值,並且爲「假」和1爲「真」返回0。然後,我想將結果附加到數據框中的第三列,最後將更新後的數據框導出到csv。

我已經定義了一個功能,看來我的工作。但是,當我運行腳本時,它不會執行,我收到消息:

<function convert_string at 0x000000000DE35588> 

在控制檯中。 我的功能如下。任何幫助或建議將受到歡迎。

def convert_string(explosions): 
    for i in range(0,len(explosions)): 
     if i == 'True' : 
      return 1 
     elif i == 'False' : 
      return 0 
     else: 
      return 2 

print convert_string 
+0

你永遠不會打電話給你的功能。 –

回答

1

如果您使用的是數據框中工作時使用一個明確的for循環,你是最有可能「做錯了」。另外,如果您在return的第一次迭代中使用for循環,又有什麼意義?

考慮這些:

import numpy as np 

df['third_column'] = np.where(df['value'], 1, 0) 

如果你堅持定義一個函數:

def foo(x): 
    return int(x) 

df['third_column'] = df['value'].apply(foo) 

或者乾脆

df['third_column'] = df['value'].apply(lambda x: int(x)) 

完整的示例:

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'value': [True, False]}) 
print(df) 

#  value 
# 0 True 
# 1 False 

df['third_column'] = np.where(df['value'], 1, 0) 
print(df) 

#  value third_column 
# 0 True    1 
# 1 False    0 
+0

謝謝,這是一套比我自己的代碼更優雅的替代方案。當你說顯式使用帶有數據框的for循環是「做錯了」時,是因爲你的數據框已經定義了你想要使用的數據? –

0

你沒有調用函數。您的打印聲明應該是:print convert_string(<value>),其中<value>是一個整數。