小编Sil*_*uck的帖子

如何使用 pyarrow 和 parquet 保存具有自定义类型的 Pandas DataFrame

我想将 Pandas DataFrame 保存到 parquet,但我有一些不受支持的类型(例如 bson ObjectIds)。

在整个示例中,我们使用:

import pandas as pd
import pyarrow as pa
Run Code Online (Sandbox Code Playgroud)

这是一个显示这种情况的最小示例:

df = pd.DataFrame(
    [
        {'name': 'alice', 'oid': ObjectId('5e9992543bfddb58073803e7')},
        {'name': 'bob',   'oid': ObjectId('5e9992543bfddb58073803e8')},
    ]
)

df.to_parquet('some_path')
Run Code Online (Sandbox Code Playgroud)

我们得到:

ArrowInvalid: ('Could not convert 5e9992543bfddb58073803e7 with type ObjectId: did not recognize Python value type when inferring an Arrow data type', 'Conversion failed for column oid with type object')
Run Code Online (Sandbox Code Playgroud)

我试图按照这个参考:https : //arrow.apache.org/docs/python/extending_types.html

因此我编写了以下类型扩展:

class ObjectIdType(pa.ExtensionType):

    def __init__(self):
        pa.ExtensionType.__init__(self, pa.binary(12), "my_package.objectid")

    def __arrow_ext_serialize__(self):
        # since we don't have …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas parquet pyarrow

12
推荐指数
1
解决办法
1414
查看次数

实现Comparable以使用字符串进行字母排序

我希望一个对象可以比较(在这种情况下在TreeSet中使用它).

我的对象有一个名称字段,我希望按字母顺序排序.

我首先想到我可以使用字符串的unicode值并简单地做一个减法,但是然后AA会在Ab之后...例如...

这是我开始的方式:

public final class MyObject implements Comparable<MyObject> {

 private String name;

 public MyObject(String name) {
  this.name = name;
 }

 public String name() {
  return name;
 }

 @Override
 public int compareTo(MyObject otherObject) {
  return WHAT DO I PUT HERE ?;
 }
}
Run Code Online (Sandbox Code Playgroud)

感谢那些愿意帮助的人,祝你有个美好的一天!

java interface comparable implements alphabetical-sort

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

Pyttsx 未显示 Windows 10 上已安装的语言

我正在尝试使用 pyttsx3 说出法语文本。但是,仅提供英语。

\n\n

遵循如何更改 pyttsx3 中的声音?,我尝试按照此处的说明安装法语语音包https://support.office.com/en-us/article/how-to-download-text-to-speech-languages-for-windows-10-d5a6b612- b3ae-423f-afa5-4f6caf1ec5d3

\n\n

我重新启动了计算机,现在已安装法语语音转文本模块,并可在 Windows 设置中的 \xe2\x80\x9cvoice\xe2\x80\x9d 菜单下使用。测试按钮起作用了,我听到了法语的测试样本。

\n\n

我尝试运行以下代码来查看 pyttsx3 可用的内容:

\n\n
import pyttsx3 \nengine = pyttsx3.init() \nvoices = engine.getProperty(\'voices\') \nfor voice in voices: \n    print(voice, voice.id) \n    engine.setProperty(\'voice\', voice.id) \n    engine.say("Hello World!") \n    engine.runAndWait() \n    engine.stop() \n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,我只得到以下输出:

\n\n
<Voice id=HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices\\Tokens\\TTS_MS_EN-US_ZIRA_11.0\n          name=Microsoft Zira Desktop - English (United States)\n          languages=[]\n          gender=None\n          age=None> HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices\\Tokens\\TTS_MS_EN-US_ZIRA_11.0\n
Run Code Online (Sandbox Code Playgroud)\n\n

我缺少什么?

\n

python speech-to-text windows-10 pyttsx

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

从抽象方法继承包装器

我想系统地包装一些基类的重写方法。

ABC用于基类。我试图包装@abstractmethod,将注释放在之前或之后,但它不起作用。据我了解,整个包装方法被覆盖。

from functools import wraps
from abc import ABC, abstractmethod

def print_before(func):
    @wraps(func)
    def out(*args, **kwargs):
        print('Hello')
        return func(*args, **kwargs)

    return out

class Base(ABC):
    @print_before
    @abstractmethod
    def test(self):
        pass

class Extend(Base):
    def test(self):
        print('World')
Run Code Online (Sandbox Code Playgroud)

这是我们测试时发生的情况:

Extend().test()
Run Code Online (Sandbox Code Playgroud)

结果:

World
Run Code Online (Sandbox Code Playgroud)

期望:

Hello
World
Run Code Online (Sandbox Code Playgroud)

我想我没有使用正确的方法来获得这种行为。在重写方法之前和之后运行一些代码的好的 Pythonic 方式是什么?

python abstract-class abc wrapper python-3.x

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