将 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)
我的数据框在一些转换后似乎是非数字的(参见前面的 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)