经过一些转换后,我的数据框似乎是非数字的(请参见上一篇关于删除重复项的文章: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
答案 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)