2016-10-01 68 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