如果一列中的值超出某个值,则删除2列中的所有行

时间:2017-05-17 13:01:33

标签: python python-3.x pandas twitter

我有两列"感情"和"推文"。 情绪包含数字,推文字符串。 我有这两列的数据帧df。现在我想删除推文长度超过150个字母的所有行。

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

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

但这会使y值保持不变。

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

2 个答案:

答案 0 :(得分:0)

使用.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

答案 1 :(得分:0)

你可以将两个列表压缩成第三个列表,所以它是一个两元组的列表。

>>>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])