亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Pandas Dataframe 刪除了很多行

Pandas Dataframe 刪除了很多行

皈依舞 2021-10-19 17:05:42
我有一個包含大量推文的數據框,我想刪除重復項。推文存儲在 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)
查看完整描述

2 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

在pandas通常有總是比遍歷數據框用一種更好的方式for循環。


在這種情況下,您真正想要的是將相同的推文組合在一起并只保留第一個。這可以通過以下方式實現pandas.DataFrame.groupby:


import random

import string

import pandas as pd


# some random one character tweets, so there are many duplicates

df = 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")


查看完整回答
反對 回復 2021-10-19
?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

筆記

Graipher 的解決方案告訴您如何生成唯一的數據幀。我的回答告訴您為什么您當前的操作刪除了太多行(根據您的問題)。


尾注

當您輸入“else”語句以刪除重復的推文時,您將刪除具有指定推文的所有行。我們來演示一下:


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”而不是“推文”中刪除重復項),您最終會得到(即只有不唯一的行)。


Out[118]: 

   A  B  C  D  E

5  8  8  7  6  7

7  1  4  7  8  7

8  3  2  5  8  5

9  5  8  9  2  4

如果您只是想讓它獨一無二,請實施 Graipher 的建議。如果你想計算你有多少重復,你可以這樣做:


total = df.shape[0]

duplicates = total - df.A.unique().size


查看完整回答
反對 回復 2021-10-19
  • 2 回答
  • 0 關注
  • 276 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號