获取pandas数据框中列中n个单词的前n / 2个

时间:2017-07-03 19:41:29

标签: python pandas

我想在pandas数据框的列中获得n个单词的前n / 2个。 每行可以具有不同数量的单词,但每行具有偶数个单词。 此列包含项目的名称,但每个名称都是重复的。 例如,One变为One OneOne Two变为One Two One Two

我认为以下内容可行。

  1. 计算单词数
  2. 拆分空格列
  3. 获得此分割中的前n / 2个单词
  4. 但它不起作用(我只是偶然使用Python和pandas)。 这是一个MWE。

    import pandas as pd
    df = pd.DataFrame(['One One', 'One Two One Two'])
    df[1] = df[0].str.count('\w+')
    df[2] = df[0].str.split()
    df[3] = df[0].get(df[2])
    

    P.S。如果您对R用户有很好的pandas参考,请告诉我。

3 个答案:

答案 0 :(得分:3)

df = pd.DataFrame(['One One', 'One Two One Two'])

def proc(s):
    l = s.split()
    return ' '.join(l[:len(l) // 2])

df[1] = [proc(s) for s in df[0].values.tolist()]

                 0        1
0          One One      One
1  One Two One Two  One Two

答案 1 :(得分:3)

基于你之前的努力:

df = pd.DataFrame(['One One', 'One Two One Two'])
df[1] = df[0].str.count('\w+')
df[2] = df[0].str.split()
df[3]=df.apply(lambda x: ' '.join(x[2][:int((x[1]/2))]), axis=1)

df
Out[354]: 
                 0  1                     2        3
0          One One  2            [One, One]      One
1  One Two One Two  4  [One, Two, One, Two]  One Two

我的解决方案(基于您提到的内容每行可以有不同数量的单词,但每行都有一个偶数个单词。此列包含项目的名称,但每个名称都是重复的。< / em>):

df['Target']= df.apply(lambda x: x[0][:int((len(x[0])+1)/2)], axis=1)


df
Out[389]: 
                 0    Target
0          One One      One 
1  One Two One Two  One Two 

答案 2 :(得分:0)

df[column_name].apply(lambda x: ' '.join(x.split()[:2]))

这将从数据框中列出的列名中获取前n个(在上述情况下为2个)。