将 pandas 数据框转换为数字

Convert pandas Dataframe to numeric

我的数据框在一些转换后似乎是非数字的(参见前面的 post 关于删除重复项:

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

ValueError:Pandas 数据转换为对象的 numpy dtype。使用 np.asarray(data).

检查输入数据

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

出于某种原因,将数据框与 sklearn 一起使用是可行的

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

这是我提到的 post 转换发生位置的示例(比较最后一行前后的 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

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

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

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

或者,如果您的 实际 示例非常不同,您不能使用上面的示例,那么总是有转换,即

out.astype(int)