【问题标题】:Get the number entries in a list entry of a pandas dataframe获取熊猫数据框列表条目中的数字条目
【发布时间】:2019-05-14 07:44:15
【问题描述】:

我有一个包含各种列的 pandas 数据框,其中一个是我使用 split 命令拆分为列表的字符串:

    import Pandas as pd

    csvRead = pd.read_csv('../data/Data.csv')
    df = pd.DataFrame(csvRead)

    df['split_string'] = df['string'].str.split(r'[ ]')

    idx = 0
    for i in df['split_string']:
        df['split_string_counts'][idf] = len(i)
        i += 1

现在我想对 for 语句进行矢量化处理,因为 Pandas.Series pacakge 中没有标准命令可以计算 split 命令给出的列表的元素数。数据帧 df 有超过 200 万个条目,因此 for 非常低效。

【问题讨论】:

标签: pandas list series


【解决方案1】:

不幸的是,这里矢量化是不可能的,但如果没有缺失值,您可以使用列表推导:

#DataFrame constructor is not necessary, because read_csv return DataFrame
df = pd.read_csv('../data/Data.csv')

df['split_string'] = [x.split() for x in df['string']]
df['split_string_counts'] = [len(x) for x in df['split_string']]

如果可能的缺失值使用splitlen

df['split_string'] = df['string'].str.split()
df['split_string_counts'] = df['split_string'].str.len()

【讨论】:

  • 谢谢! df['split_string_counts'] = df['split_string'].str.len() 工作!
  • @rjc - 超级,很高兴能帮上忙!
【解决方案2】:

可以通过访问系列底层.values来完成:

import numpy as np

mylen = np.vectorize(len)
df['split_string_counts'] = mylen(df['split_string'].values)

但是this answer 上的 cmets 表明它不会比 jezrael 建议的列表推导更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 2021-05-25
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2016-08-07
    相关资源
    最近更新 更多