Python 熊猫。得到你的假人

Python 熊猫。得到你的假人,python,pandas,Python,Pandas,我正在使用pandas.get_dummies在使用tpot之前转换一些分类变量。我的问题是我有一个连续变量,例如时间,它被转换成类别,即使它是一个连续变量。这似乎并不是在所有情况下都会发生,但我不知道什么时候会发生 我测试了以下内容: pd.isnull(my_dataframe).any() 所有的分类都是假的 print(type(features[0,5])) # the time category with my continuous variable 输出是 但是当我这样做的时

我正在使用pandas.get_dummies在使用tpot之前转换一些分类变量。我的问题是我有一个连续变量,例如时间,它被转换成类别,即使它是一个连续变量。这似乎并不是在所有情况下都会发生,但我不知道什么时候会发生

我测试了以下内容:

pd.isnull(my_dataframe).any()
所有的分类都是假的

print(type(features[0,5])) # the time category with my continuous variable
输出是

但是当我这样做的时候

df_dummies=pd.get_dummies(my_dataframe)
df_dummies.columns
它为“我的时间”功能的每个值创建一列

就像这样:“时间(分钟)2”,“时间(分钟)3”, ‘时间(分钟)’4、‘时间(分钟)’5、‘时间(分钟)’6、‘时间(分钟)’10’, ‘时间(分钟)’15、‘时间(分钟)’16、‘时间(分钟)’20、‘时间(分钟)’25’, “时间(分钟)_30”

你知道这里有什么问题吗?

您的时间类别看起来像是被意外地投射到了一个
str
线上的某个地方

import pandas as pd
import numpy as np
from datetime import datetime
df = pd.DataFrame({'foo':np.random.choice([1, 2], 12),
                   'date':pd.date_range(start=datetime.now(),
                                        periods=12, freq='1min'),
                   'baz': np.linspace(0, 1, 12)})
df.dtypes
df_cast = df.copy()
df_cast['date'] = df_cast['date'].astype(str)
df_cast.dtypes
输出

foo      object
date     object
baz     float64
dtype: object
您可以验证使用
df_cast
pd.get_dummies
的行为是否与您所经历的一致,并且在将任何字段转换为
str

之前,它是否正确处理
浮动
int
datetime
对象 您的时间类别看起来像是被意外地投射到了一个
str
线上的某个地方

import pandas as pd
import numpy as np
from datetime import datetime
df = pd.DataFrame({'foo':np.random.choice([1, 2], 12),
                   'date':pd.date_range(start=datetime.now(),
                                        periods=12, freq='1min'),
                   'baz': np.linspace(0, 1, 12)})
df.dtypes
df_cast = df.copy()
df_cast['date'] = df_cast['date'].astype(str)
df_cast.dtypes
输出

foo      object
date     object
baz     float64
dtype: object

您可以验证
pd.get_dummies
df_cast
的行为是否与您所经历的一致,以及它是否正确处理
浮动
ints
datetime
对象在将任何字段强制转换为
str

之前,是否已检查时间特征是否推断为datetime对象而不是字符串?如何检查?如果它是float类型,它仍然可以被推断为字符串吗?当我添加这一行时:my_dataframe[“Time(min)”]=my_dataframe[“Time(min)”)。astype(np.float64),它解决了我的问题。但我不明白,如果类型是float64,那么首先为什么会发生这种情况?在调用
pd.get\u dummies
之前,只需检查
my\u dataframe.dtypes
。dummies函数不应影响浮点、日期时间字段或整数。因此,我猜想您看到的受影响的列是意外地被转换为行中某个字符串的。我的时间类别在get_dummies命令之前显示了type object,但仍然被拆分。我不确定出了什么问题。你检查过你的时间特征被推断为datetime对象而不是字符串吗?我怎么检查?如果它是float类型,它仍然可以被推断为字符串吗?当我添加这一行时:my_dataframe[“Time(min)”]=my_dataframe[“Time(min)”)。astype(np.float64),它解决了我的问题。但我不明白,如果类型是float64,那么首先为什么会发生这种情况?在调用
pd.get\u dummies
之前,只需检查
my\u dataframe.dtypes
。dummies函数不应影响浮点、日期时间字段或整数。因此,我猜想您看到的受影响的列是意外地被转换为行中某个字符串的。我的时间类别在get_dummies命令之前显示了type object,但仍然被拆分。我不知道怎么了。当你说“偶然”时,这是不是因为熊猫身上的某些东西?因为我看不出我的代码中有什么东西。很可能。一个常见的罪魁祸首是读取文件。如果不提供显式数据类型,它将从文件中推断日期时间字段作为字符串。您可以通过将
df
写入csv并直接读入来再次检查。当您说“意外”时,这是否意味着因为熊猫中的某些内容?因为我看不出我的代码中有什么东西。很可能。一个常见的罪魁祸首是读取文件。如果不提供显式数据类型,它将从文件中推断日期时间字段作为字符串。您可以通过将
df
写入csv并将其直接读回来再次检查此项。