将pandas数据框转换为数字

时间:2018-07-23 01:24:56

标签: python pandas numeric

经过一些转换后,我的数据框似乎是非数字的(请参见上一篇关于删除重复项的文章:drop duplicates pandas dataframe

当我在statsmodels回归中使用它时,出现此错误:

ValueError:将熊猫数据强制转换为对象的numpy dtype。使用np.asarray(data)检查输入数据。

我可以将整个数据框以某种方式转换回数字吗?

出于某些原因,将数据框与sklearn结合使用

我实际上不确定数据类型是什么,仅在spyder中打开数据框后,我才注意到它不再弯曲了。当我使用type(df)时,它只是告诉我这是一个数据框。

这是我提到的帖子中发生转换的示例(比较最后一行之前和之后的df):

  dict1 = [{'var0': 0, 'var1': 0, 'var2': 2},
     {'var0': 0, 'var1': 0, 'var2': 4},
     {'var0': 0, 'var1': 0, 'var2': 8},
     {'var0':0, 'var1': 0, 'var2': 12},]


 df = pd.DataFrame(dict1, index=['s1', 's2','s1','s2'])

df.reset_index()。T.drop_duplicates()。T.set_index('index')

这是运行最后一行之前的数据帧:

 df.info()
 <class 'pandas.core.frame.DataFrame'>
 Index: 4 entries, s1 to s2
 Data columns (total 3 columns):
 var0    4 non-null int64
 var1    4 non-null int64
 var2    4 non-null int64
 dtypes: int64(3)

这是在之后:

  df.info()
  <class 'pandas.core.frame.DataFrame'>
  Index: 4 entries, s1 to s2 
  Data columns (total 2 columns):
  var0    4 non-null object
  var2    4 non-null object
  dtypes: object(2)
  memory usage: 96.0+ bytes

转换后:

   print(df)
  var0 var2
  index          
 s1       0    2
 s2       0    4
 s1       0    8
 s2       0   12

1 个答案:

答案 0 :(得分:2)

原始答案in this post的一个问题是转换将整数转换为对象。在转置之后发生这种情况,因为现在同一列存储整数和文本索引。

相反,您可以像这样回避该问题:

out = df.reset_index(drop=True).T.drop_duplicates().T.set_index(df.index)
out
    var0  var2
s1     0     2
s2     0     4
s1     0     8
s2     0    12

或者,如果您的 actual 示例与上面的示例有很大不同,以致您无法使用上面的示例,则始终存在强制转换,即

out.astype(int)