我在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_before
到second_week_before_n_1
的另一列显示为dtype对象。因此test_string
是数据库中的一个字符串,另一个是十进制。但是使用dtype对象,我无法与另一个float类型的列执行乘法。
现在,我实际上有数百列,并且我想将所有dtype对象转换为浮点数(当其为十进制/整数时),并转换为字符串(当其为字符串时)。
我该如何自动执行。如何知道对象是字符串还是小数?
谢谢。
答案 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
列应为object
或int
类型的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