以下行将pandas.Dataframe
对象中的所有列转换为数字。
columns = ['a', 'b']
dft = pd.DataFrame(data=[['1','2'], ['3','4'],['5','6']], columns=columns)
for col in columns:
dft[col] = pd.to_numeric(dft[col])
效果很好,但for ... in:
很难看。
我怎么能说使用lambda
函数和/ list comprehension
来使这个循环在一行中运行?
(我尝试了很多东西,但是我无法找到如何将pd.to_numeric()
的结果分配给数据框中每列的变量名称。
答案 0 :(得分:2)
我在github找到了解决方案。
print dft
print dft.dtypes
# a b c
#0 1 2 5
#1 3 4 7
#2 5 6 9
#a object
#b object
#c object
#dtype: object
dft1 = dft.apply(pd.to_numeric)
print dft1
print dft1.dtypes
# a b c
#0 1 2 5
#1 3 4 7
#2 5 6 9
#a int64
#b int64
#c int64
#dtype: object
dft[['a', 'b']] = dft[['a', 'b']].apply(pd.to_numeric)
print dft
print dft.dtypes
# a b c
#0 1 2 5
#1 3 4 7
#2 5 6 9
#a int64
#b int64
#c object
#dtype: object
下一个解决方案是使用convert_objects
,但会引发错误(v 0.17.0):
dft.convert_objects(convert_numeric=True)
FutureWarning:不推荐使用convert_objects。使用特定于数据类型的转换器pd.to_datetime,pd.to_timedelta和pd.to_numeric。
答案 1 :(得分:1)
尝试:
dft = dft.applymap(lambda x: int(x))
对于记录applymap
用于元素地应用lambda函数(documentation)
修改强>
第二种方式是:
dft=dft.astype(int)
我没有及时计算方法。我认为第二种方式更多是 pandaic