Получить количество записей в записи списка в панде - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть фрейм данных 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, которая может подсчитать количество элементов в списке, заданном командой split.Фрейм данных df содержит более 2 миллионов записей, поэтому for очень неэффективен.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Это можно сделать, обратившись к основному ряду .values:

import numpy as np

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

, но комментарии к этому ответу предполагают, что это не будет быстрее, чем понимание списка, котороеДжезраэль предлагает.

0 голосов
/ 13 декабря 2018

К сожалению, здесь векторизация невозможна, но если нет пропущенных значений, вы можете использовать списочные выражения:

#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']]

Если возможно пропущенные значения, используйте split с len:

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