python - 连接两个熊猫系列(不是 str 类型)的值太慢(线性复杂度)
问题描述
我有pandas.DataFrame
两个(或更多)不是类型的系列str
(例如 float 类型)。我想要的输出是一系列类型str
,它是我的系列(float 类型)与给定分隔符(例如“-”)串联的结果。
以下函数build_df_ex
构建示例数据框:
def build_df_ex(n):
df_ex = pd.DataFrame({"s1": -abs(np.random.rand(int(n))),
"s2": +abs(np.random.rand(int(n)))})
return df_ex
该函数convert_to_str_and_add
进行所需的连接:
def convert_to_str_and_add(df, sep="-"):
df = df.astype(str)
s = df.s1 + sep + df.s2
return s
我的主要问题是这个函数具有线性复杂性(见下图),这在我的情况下是禁止的。该函数的主要瓶颈是str
类型的转换。我曾尝试采用 numpy 的方式,但我没有看到任何性能提升,可能是因为 pandas 已经在做这件事了。
任何人都有可以使此操作更快的解决方案吗?
非常感谢
解决方案
您无法逃避线性性能 - 您唯一的希望是展示更多您计划对结果执行的操作,以避免额外的工作。你写的完全合理,你可以试试下面的,看看它是否有更好的性能(但如果没有,我不会感到惊讶)。
df.apply(('{0[0]}' + sep + '{0[1]}').format, axis=1)
推荐阅读
- sql-server - 查询获取一对多和多对一员工项目关系
- android - android:图形内存极高
- bash - 根据文本文件中的列表从一系列目录中复制文件
- java - 如何决定分配给 Java 堆的物理内存量?
- googlebot - 如何报告 GoogleBot 的错误?
- bdd - 这是验证 API 授权的正确语法吗?given().get("url").when().auth("username","pwd").then().assertthat().statuscode(200)
- c - 是否有使用 X-NUCLEO_NFC05A1 读取 NFC-A (ISO14443A) 标签的功能?
- sql - 在 Microsoft SQL Server 中更新一行
- javascript - ajax提交成功后加载json数据
- vuejs2 - 是否可以在没有构建器的情况下将 ag-grid 与 vue 一起使用?