我想将 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) 我希望一个对象可以比较(在这种情况下在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)
感谢那些愿意帮助的人,祝你有个美好的一天!
我正在尝试使用 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\nimport 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() \nRun 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\nRun Code Online (Sandbox Code Playgroud)\n\n我缺少什么?
\n我想系统地包装一些基类的重写方法。
我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 ×3
abc ×1
comparable ×1
dataframe ×1
implements ×1
interface ×1
java ×1
pandas ×1
parquet ×1
pyarrow ×1
python-3.x ×1
pyttsx ×1
windows-10 ×1
wrapper ×1