Pandas Dataframe 删除了很多行

我有一个包含大量推文的数据框,我想删除重复项。推文存储在 fh1.df['Tweets'] 中。我计算了非重复的数量。j 重复的数量。在 else 语句中,我删除了重复项的行。如果我创建一个新列表“tweetChecklist”,我将所有好的推文都放入其中。


好的,如果我做 i + j ,我就变成了原始推文的数量。所以这很好。但是在其他情况下,我不知道为什么,他删除了很多行,因为在 for 循环(1/10)之后我的数据框的形状要小得多。


“ fh1.df = fh1.df[fh1.df.Tweets != current_tweet] ”行如何删除多行?


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)


皈依舞
浏览 232回答 2
2回答

温温酱

在pandas通常有总是比遍历数据框用一种更好的方式for循环。在这种情况下,您真正想要的是将相同的推文组合在一起并只保留第一个。这可以通过以下方式实现pandas.DataFrame.groupby:import randomimport stringimport pandas as pd# some random one character tweets, so there are many duplicatesdf = pd.DataFrame({"Tweets": random.choices(string.ascii_lowercase, k=100),                   "Data": [random.random() for _ in range(100)]})df.groupby("Tweets", as_index=False).first()#    Tweets      Data# 0       a  0.327766# 1       b  0.677697# 2       c  0.517186# 3       d  0.925312# 4       e  0.748902# 5       f  0.353826# 6       g  0.991566# 7       h  0.761849# 8       i  0.488769# 9       j  0.501704# 10      k  0.737816# 11      l  0.428117# 12      m  0.650945# 13      n  0.530866# 14      o  0.337835# 15      p  0.567097# 16      q  0.130282# 17      r  0.619664# 18      s  0.365220# 19      t  0.005407# 20      u  0.905659# 21      v  0.495603# 22      w  0.511894# 23      x  0.094989# 24      y  0.089003# 25      z  0.511532更好的是,甚至有一个明确的函数pandas.drop_duplicates,它的速度大约是其两倍:df.drop_duplicates(subset="Tweets", keep="first")

暮色呼如

笔记Graipher 的解决方案告诉您如何生成唯一的数据帧。我的回答告诉您为什么您当前的操作删除了太多行(根据您的问题)。尾注当您输入“else”语句以删除重复的推文时,您将删除具有指定推文的所有行。我们来演示一下:import numpy as npimport pandas as pddf = pd.DataFrame(data=np.random.randint(0, 10, (10, 5)), columns=list('ABCDE'))这有什么作用:Out[118]:    A  B  C  D  E0  2  7  0  5  41  2  8  8  3  72  9  7  4  6  23  9  7  7  9  24  6  5  7  6  85  8  8  7  6  76  6  1  4  5  37  1  4  7  8  78  3  2  5  8  59  5  8  9  2  4在您的方法中(假设您想从“A”而不是“推文”中删除重复项),您最终会得到(即只有不唯一的行)。Out[118]:    A  B  C  D  E5  8  8  7  6  77  1  4  7  8  78  3  2  5  8  59  5  8  9  2  4如果您只是想让它独一无二,请实施 Graipher 的建议。如果你想计算你有多少重复,你可以这样做:total = df.shape[0]duplicates = total - df.A.unique().size
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python