Python “数据帧”将删除多行
我有一个有很多tweet的数据帧,我想删除重复的tweet。tweets存储在fh1.df['tweets']中。我计算不重复的数量。j重复的数量。在else语句中,我删除了重复的行。在“如果我做一个新的列表”tweetChecklist中,我把所有好的推文都放进去了 好吧,如果我做I+j,我会变成原始推文的数量。那很好。但在else中,我不知道为什么,他删除了很多行,因为在for循环(1/10)之后,我的数据帧的形状要小得多 “fh1.df=fh1.df[fh1.df.Tweets!=current_tweet]是如何实现的 “行删除到多行Python “数据帧”将删除多行,python,pandas,dataframe,twitter,Python,Pandas,Dataframe,Twitter,我有一个有很多tweet的数据帧,我想删除重复的tweet。tweets存储在fh1.df['tweets']中。我计算不重复的数量。j重复的数量。在else语句中,我删除了重复的行。在“如果我做一个新的列表”tweetChecklist中,我把所有好的推文都放进去了 好吧,如果我做I+j,我会变成原始推文的数量。那很好。但在else中,我不知道为什么,他删除了很多行,因为在for循环(1/10)之后,我的数据帧的形状要小得多 “fh1.df=fh1.df[fh1.df.Tweets!=curr
tweetChecklist = []
for current_tweet in fh1.df['Tweets']:
if current_tweet not in tweetChecklist:
i = i + 1
tweetChecklist.append(current_tweet)
else:
j = j + 1
fh1.df = fh1.df[fh1.df.Tweets != current_tweet]
fh1.df['Tweets'] = pd.Series(tweetChecklist)
注
Graipher的解决方案告诉您如何生成唯一的数据帧。我的答案告诉您当前操作删除太多行的原因(根据您的问题)
尾注
当您输入“else”语句删除重复的tweet时,您正在删除包含指定tweet的所有行。让我们演示一下:
import numpy as np
import pandas as pd
df = pd.DataFrame(data=np.random.randint(0, 10, (10, 5)), columns=list('ABCDE'))
这意味着什么:
Out[118]:
A B C D E
0 2 7 0 5 4
1 2 8 8 3 7
2 9 7 4 6 2
3 9 7 7 9 2
4 6 5 7 6 8
5 8 8 7 6 7
6 6 1 4 5 3
7 1 4 7 8 7
8 3 2 5 8 5
9 5 8 9 2 4
在您的方法中(假设您希望从“A”而不是“Tweets”中删除重复项),您将得到(即,只有非唯一的行)
如果您只是想让它变得独特,请实现Graipher的建议。如果要计算有多少个副本,可以执行以下操作:
total = df.shape[0]
duplicates = total - df.A.unique().size
注
Graipher的解决方案告诉您如何生成唯一的数据帧。我的答案告诉您当前操作删除太多行的原因(根据您的问题)
尾注
当您输入“else”语句删除重复的tweet时,您正在删除包含指定tweet的所有行。让我们演示一下:
import numpy as np
import pandas as pd
df = pd.DataFrame(data=np.random.randint(0, 10, (10, 5)), columns=list('ABCDE'))
这意味着什么:
Out[118]:
A B C D E
0 2 7 0 5 4
1 2 8 8 3 7
2 9 7 4 6 2
3 9 7 7 9 2
4 6 5 7 6 8
5 8 8 7 6 7
6 6 1 4 5 3
7 1 4 7 8 7
8 3 2 5 8 5
9 5 8 9 2 4
在您的方法中(假设您希望从“A”而不是“Tweets”中删除重复项),您将得到(即,只有非唯一的行)
如果您只是想让它变得独特,请实现Graipher的建议。如果要计算有多少个副本,可以执行以下操作:
total = df.shape[0]
duplicates = total - df.A.unique().size
在
for
循环中,通常有一种比使用for
循环遍历数据帧更好的方法
在这种情况下,您真正想要的是将相等的tweet分组在一起,只保留第一条。这可以通过以下方式实现:
更好的是,甚至有一个明确的函数,其速度大约是原来的两倍:
df.drop_duplicates(subset="Tweets", keep="first")
在
for
循环中,通常有一种比使用for
循环遍历数据帧更好的方法
在这种情况下,您真正想要的是将相等的tweet分组在一起,只保留第一条。这可以通过以下方式实现:
更好的是,甚至有一个明确的函数,其速度大约是原来的两倍:
df.drop_duplicates(subset="Tweets", keep="first")
只需使用
fh1.df=fh1.df.groupby(“Tweets”,as_index=False)?感谢您的回答:)每一条独特的推文都需要一条最先出现的推文。那么你到底想用这段代码实现什么呢?是的,它是有效的!非常感谢。我会把它写下来作为一个答案。只需使用fh1.df=fh1.df.groupby(“Tweets”,as_index=False)。首先()
?@Graipher这句话做什么?感谢您的回答:)每一条独特的推文都需要一条最先出现的推文。那么你到底想用这段代码实现什么呢?是的,它是有效的!非常感谢。我会把它写下来作为一个答案。所以当有重复的时候,它会删除两行。我怎么能保留一行呢?Graipher的解决方案将保留其中一行。在原始代码中,您删除了两行。Graipher的解决方案不仅能满足您的需求,而且比您的原始代码快几个数量级。因此,当出现重复时,它会同时删除两行。我怎么能保留一行呢?Graipher的解决方案将保留其中一行。在原始代码中,您删除了两行。Graipher的解决方案不仅能满足您的需求,而且比您的原始代码快几个数量级。