Python 将Mysql.connector数据类型对象转换为数字/字符串

Python 将Mysql.connector数据类型对象转换为数字/字符串,python,pandas,numpy,Python,Pandas,Numpy,我在python 3中使用mysql.connector进行SQL查询。我正在将fetchall的结果转换为一个数据帧 mycursor.execute(sql_query) m_table = pd.DataFrame(mycursor.fetchall()) m_table.columns = [i[0] for i in mycursor.description] 获取数据类型给了我: Out[185]: sales_forecast_id int64 year

我在python 3中使用mysql.connector进行SQL查询。我正在将fetchall的结果转换为一个数据帧

mycursor.execute(sql_query)
m_table = pd.DataFrame(mycursor.fetchall()) 
m_table.columns = [i[0] for i in mycursor.description]  
获取数据类型给了我:

Out[185]: 
sales_forecast_id          int64
year                       int64
products_id                int64
test_string               object
reconduit                  int64
target_week_1              int64
target_week_2              int64
year_n_1                   int64
two_week_before           object
first_week_before         object
second_week_before        object
two_week_before_n_1       object
first_week_before_n_1     object
second_week_before_n_1    object
CIBLE_n_1                  int64
dtype: object
Test_string是我为测试而添加的假列,它在所有行中都包含
“Test”

现在,这个
test\u字符串
列和另一个从
两周前
第二周前
列显示为数据类型对象。所以
test\u string
是数据库中的一个字符串,另一个是十进制字符串。但是对于dtype对象,我不能执行与另一个浮点类型列的乘法

现在,我实际上有数百列这样的列,我想将所有的dtype对象转换为float(当它是decimal/int时)和string(当它是string时)

我怎样才能自动完成呢。如何知道对象是字符串还是十进制


谢谢。

这是一种简单的方法,可以将此转换应用于所有列,以防确定需要将它们全部转换为浮动,但不能转换的除外(因为它们包含字符串):

输出(当列
a
应为
int
float
时,其类型为
object
):

应用以下各项:

for i in list(data):
    try:
        df[i] = df[i].astype('float')
    except ValueError:
        df[i] = df[i].astype('object')
print(df.dtypes)
输出:

a    float64
b     object
c     object
dtype: object

您可以使用
try
将所有内容转换为float,但将其转换为字符串(对象)除外。这听起来对你有好处吗?这就是我所认为的“解决办法”,但我认为会有更干净的东西。它应该会起作用。谢谢!
for i in list(data):
    try:
        df[i] = df[i].astype('float')
    except ValueError:
        df[i] = df[i].astype('object')
print(df.dtypes)
a    float64
b     object
c     object
dtype: object