【问题标题】:drop all rows in 2 columns if value in one column is beyond a certain value如果一列中的值超过某个值,则删除 2 列中的所有行
【发布时间】:2017-10-16 23:08:14
【问题描述】:

我有两列“情绪”和“推文”。 情绪包含数字、推文字符串。 我有一个包含这两列的数据框 df 。现在我想删除所有推文长度超过 150 个字母的行。

我可以通过以下方式删除 X 中的值:

    X = df["x"]
    X =[x for x in X if len(x)<151]

但这不会影响 y 值。

如果 x 长度超过 150,如何同时删除 x 和 y 值(=整行)?

【问题讨论】:

    标签: python python-3.x pandas twitter


    【解决方案1】:

    使用.str.len:

    X = df[df['x'].str.len() <= 150]
    

    作为boolean mask 删除推文超过限制的行

    例子:

    In[66]:
    df = pd.DataFrame({'sentiment':np.arange(5), 'tweets':['asdas','a','asdasdas','asdasdasdas','asdasdasdas']})
    df
    
    Out[66]: 
       sentiment       tweets
    0          0        asdas
    1          1            a
    2          2     asdasdas
    3          3  asdasdasdas
    4          4  asdasdasdas
    
    In[67]:
    X = df[df['tweets'].str.len() <=5]
    X
    
    Out[67]: 
       sentiment tweets
    0          0  asdas
    1          1      a
    

    【讨论】:

    • @M.H.如果我的回答解决了你的问题,那么你可以接受,我的回答左上角会有一个空的勾
    【解决方案2】:

    您可以将两个列表一起压缩到第三个列表中,因此它是一个二元组列表。

    >>>x = [1, 2, 3, 4]
    >>>y = [9, 8, 7, 6]
    >>>z = zip(x, y)
    >>>z
    [(1, 9), (2, 8), (3, 7), (4, 6)]
    

    使用压缩列表,您可以进行类似的列表理解

    X = df["x"]  # tweets
    Y = df["y"]  # sentiments
    Z = zip(x, y)
    Z = [z for z in Z if len(z[0]) < 151]
    

    要再次解压缩列表,您必须按照以下方式进行操作

    X = []
    Y = []
    for z in Z:
        X.append(z[0])
        Y.append(z[1])
    

    【讨论】:

      猜你喜欢
      • 2022-10-24
      • 1970-01-01
      • 2020-05-28
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 2019-07-09
      • 1970-01-01
      相关资源
      最近更新 更多