熊猫to_sql设置列类型

时间:2019-08-14 18:30:13

标签: python pandas postgresql sqlalchemy

我有一列带有String格式数字的列,我想以浮点数形式发送到let { dto -> OrderProtoBuilders.theItem {... 。如何确保PostresSQL将此列设置为float? (请注意,该列中可能是NaN)。这是代码

SQLAlchemy

3 个答案:

答案 0 :(得分:6)

首先,您的数字应为小数点格式,因此我们需要用逗号替换小数点。 接下来,您应该确保to_sql函数将使用float,并且可以使用dtype参数来实现此功能,该参数允许在插入数据库时​​设置列类型(基于sqlalchemy types)。这里的代码:

import pandas as pd
from sqlalchemy import create_engine
from sqlalchemy.types import Float # note this import to use sqlalchemy Float type

engine = create_engine('postgresql://{}:{}@{}:5432/{}'.format(USER, DB_PW, HOST, DB))

df = pd.DataFrame({'String2Number': ['0,2', '', '0,0000001']})

# Replacing ',' to '.'
df['String2Number'] = df['String2Number'].apply(lambda x: str(x).replace(',', '.'))

# Set column type as SQLAlchemy Float
df.to_sql(
  name='TABLE_NAME',
  con=engine,
  index=False,
  dtype={'String2Number': Float()}
)

答案 1 :(得分:1)

to_sql有一个名为dtype的参数,您可以使用它来定义架构。 (https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html

import pandas as pd
from sqlalchemy import create_engine
from sqlalchemy.types import Float

engine = create_engine('postgresql://{}:{}@{}:5432/{}'.format(USER, DB_PW, HOST, DB))

df = pd.DataFrame({'String2Number': ['0,2', '', '0,0000001']})

df.to_sql(name='TABLE_NAME', con=engine, index=False, dtype={"String2Number": Float()})

答案 2 :(得分:0)

尝试将数据框更改为数字。也许它可以提供帮助。示例:

    df[1] = pd.to_numeric(df[1])