将Mysql.connector dtypes对象转换为数字/字符串

时间:2019-11-15 14:22:18

标签: 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]  

获取dtypes给了我

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_string列以及从two_week_beforesecond_week_before_n_1的另一列显示为dtype对象。因此test_string是数据库中的一个字符串,另一个是十进制。但是使用dtype对象,我无法与另一个float类型的列执行乘法。

现在,我实际上有数百列,并且我想将所有dtype对象转换为浮点数(当其为十进制/整数时),并转换为字符串(当其为字符串时)。

我该如何自动执行。如何知道对象是字符串还是小数?

谢谢。

1 个答案:

答案 0 :(得分:1)

如果您确定需要将它们全部转换为浮点数,则可以轻松地将此转换应用于所有列,这是一种简便的方法(因为它们包含字符串):

import numpy as np
import pandas as pd
data = {'a':[1,2,3,4],'b':['a','b','aa','abc'],'c':[100,13,14,'xD']}

df = pd.DataFrame(data)
df['a'] = df['a'].astype('object')
print(df.dtypes)

输出(其中a列应为objectint类型的float):

a    object
b    object
c    object
dtype: 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