小编Ste*_*ost的帖子

pandas astype():str vs 'string' 与 StringDtype

有很多关于 pandas 中对象与字符串数据类型的帖子。我已经在很大程度上理解了这种区别。我不明白这三个选项之间的区别:

some_series.astype(str)
some_series.astype('string')
some_series.astype(pd.StringDtype())
Run Code Online (Sandbox Code Playgroud)
  • 第一个选项将 Series 的 dtype 转换为对象类型。
  • 第二个选项保留 pd.NA(在 Jupyter 中显示为 <NA>),即可以为 null 的字符串类型。
  • 据我所知,第三个选项的行为似乎与第二个选项完全相同:也是可为空的字符串类型。

此外,如果执行 astype() 后我检查第二个和第三个选项的 dtype,两者都会返回相同的输出:string[python]

为了简单起见,我可以只使用 astype('string') 而不是 astype(pd.StringDtype()) 并获得完全相同的行为,包括转换仅具有整数/浮点数的系列或此类数字数据的可为空版本类型?astype('string') 和 astype(pd.StringDtype()) 都在内部映射到 StringDtype 吗?我在 pandas 文档(或其他 stackoverflow 帖子)中找不到关于这一点的明确说明。谢谢您的帮助。

使用:

  • 熊猫1.4.1
  • 蟒蛇3.10.4

python python-3.x pandas

6
推荐指数
1
解决办法
4118
查看次数

如何对多个 zip 文件进行上下文管理 BytesIO?

我正在尝试在创建多个 zip 文件时对 BytesIO 流使用上下文管理器。在写入第一个 zip 文件后,我找不到“重置”BytesIO 对象的方法,因此我可以使用相同的 BytesIO 对象创建下一个 zip 文件。在将第二个 zip 文件写入磁盘后尝试打开该文件时,我总是收到“无法打开文件...作为存档”错误。第一个 zip 文件打开得很好。我已经搜索过,但找不到解决方案。将模式从写入更改为追加也没有帮助。当然,我可以重新初始化一个新的 BytesIO 对象,但这会破坏上下文管理器。下面是我认为应该有效的代码。我在 Windows 10 上使用 Anaconda Python 3.6.6。

import io
import os
import zipfile

with io.BytesIO() as bytes_io:
    with zipfile.ZipFile(bytes_io, mode='w') as zf:
        filecount = 0
        for item in os.scandir(r'C:\Users\stephen\Documents'):
            if not item.is_dir():
                zf.write(item.path, item.name)
                filecount += 1
                if filecount % 3 == 0:
                    with open(r'C:\Users\stephen\Documents\\' + str(filecount // 3) + '.zip', 'wb') as f:
                        f.write(bytes_io.getvalue())
                    bytes_io.seek(0)
                    bytes_io.truncate()
Run Code Online (Sandbox Code Playgroud)

python zip bytesio python-3.x

4
推荐指数
1
解决办法
3773
查看次数

T-SQL CONVERT 错误但 TRY_CONVERT 没有空值

在 SQL Server 2014 select 子句中,

AVG(CONVERT(DECIMAL(11, 8), p.[Total])) AS [Value]
Run Code Online (Sandbox Code Playgroud)

其中p.[Total]的类型为varchar(50),会引发此错误:

消息 8115,级别 16,状态 8,第 2 行
将 varchar 转换为数据类型 numeric 时发生算术溢出错误

AVG(TRY_CONVERT(DECIMAL(11, 8), p.[Total])) AS [Value]
Run Code Online (Sandbox Code Playgroud)

返回任何空值,当 CONVERT 失败时它应该这样做。当我省略 [Value] 列时,返回的行数与使用 TRY_CONVERT 时相同。

另外,使用 TRY_CONVERT 保留 [Value] 并使用过滤空值

HAVING AVG(TRY_CONVERT(DECIMAL(11, 8), p.[Total])) IS NULL
Run Code Online (Sandbox Code Playgroud)

不返回任何行。为什么TRY_CONVERT似乎对所有行(无空值)都有效,但CONVERT事实并非如此?

sql t-sql sql-server

0
推荐指数
1
解决办法
1052
查看次数

标签 统计

python ×2

python-3.x ×2

bytesio ×1

pandas ×1

sql ×1

sql-server ×1

t-sql ×1

zip ×1