【问题标题】:Replacing None with NULL or blank for VARCHAR and 0 or blank for INT fields from pandas dataframe将 None 替换为 VARCHAR 的 NULL 或空白,以及 Pandas 数据帧中的 INT 字段的 0 或空白
【发布时间】:2021-10-19 17:34:13
【问题描述】:

我正在尝试从数据库中获取数据,将它们放入数据框中并将它们加载到 AWS S3。

对于包含 None 值的字段,这些值将作为 None 加载到 S3。我希望 VARCHAR 字段中的 None 为 NULL 或空白,INT 字段中的 None 为 0 或空白。

connection = pyodbc.connect(conn)
sql = 'SELECT id, name from table_a'
df = pd.read_sql_query(sql, connection)
df=df.applymap(str) 
csv_buffer = BytesIO()
s3 = boto3.resource('s3')
with gzip.GzipFile(mode='w', fileobj=csv_buffer) as zipped_file:
        df.to_csv(TextIOWrapper(zipped_file, 'utf8'), index=False)
s3.Object(bucket[env],dest_filename).put(Body=csv_buffer.getvalue())

print(df) 时我得到的输出是 -

ID NAME
1 None
None John

我希望将数据框加载到 S3,如下所示 -

ID NAME
1
John

我该如何处理这种情况?

【问题讨论】:

    标签: python pandas dataframe amazon-s3


    【解决方案1】:

    在python中简单的将None的值改为空值,可以试试:

    for col in df.columns:
        df[col] = df[col].fillna(str())
    

    int() 也可以代替 str() 或空引号:''

    【讨论】:

    • 非常感谢。我刚试过这个df.replace([None], np.nan, inplace=True) df.fillna('', inplace=True),它也有效。
    • 不错!很高兴我能帮上忙
    猜你喜欢
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多