2016-10-01 64 views
2

我一直在這一段時間停留了一段時間,沒有任何數量的谷歌搜索似乎有幫助。修改熊貓數據框中的許多列

我正在閱讀大量的原始數據。一些變量作爲對象來源,由於各種原因使用字母來源(我不在乎)。

所以我想通過pandas.to_numeric(___ ,error='coerce')運行列的一個相當大的子集,只是爲了迫使這些被強制轉換爲整數或浮點數(同樣,我也沒有太在意這些,只是他們是數字。

我可以通過柱容易出現這種情況欄:

df['col_name'] = pd.to_numeric(df['col_name'], errors='coerce') 

不過,我有一些60列我想投這樣的..所以我想這會工作:

numeric = ['lots', 'a', 'columns'] 
for item in numeric: 
    df_[item] = pd.to_numeric(df[item], errors='coerce') 

我得到的錯誤是:

Traceback (most recent call last): 

File "/Users/____/anaconda/lib/python2.7/site-packages/IPython/core/interactiveshell.py", line 2885, in run_code 
exec(code_obj, self.user_global_ns, self.user_ns) 

File "<ipython-input-53-43b873fbd712>", line 2, in <module> 
df_detail[item] = pd.to_numeric(dfl[item], errors='coerce') 

File "/Users/____/anaconda/lib/python2.7/site-packages/pandas/tools/util.py", line 101, in to_numeric 
raise TypeError('arg must be a list, tuple, 1-d array, or Series') 

TypeError: arg must be a list, tuple, 1-d array, or Series 

我嘗試了很多版本。這與列表有關,或者通過查看。當for循環只需要輸入df(item).describe()

從我對Python的(仍然是新手)的理解,這應該工作。我處於虧損狀態。 由於

+0

看一看['applymap'](HTTP ://pandas.py data.org/pandas-docs/stable/generated/pandas.DataFrame.applymap.html),並確保給出有意義的返回值(即如果無法轉換則返回原始值)。 – Jan

回答

1

首先,請參閱this answer

# Let 
numeric = ['lots', 'a', 'columns'] 

選項1

df[numeric] = df[numeric].apply(pd.to_numeric, errors='coerce') 

選項2

df.loc[:, numeric] = pd.to_numeric(df[numeric].values.ravel(), 'coerce') \ 
         .reshape(-1, len(numeric)) 

示範
考慮數據幀df

df = pd.DataFrame([ 
     [1, 'a', 2], 
     ['b', 3, 'c'], 
     ['4', 'd', '5'] 
    ], columns=['A', 'B', 'C']) 

然後,兩個選項上述產量

enter image description here