2017-10-31 20 views
1

データフレームがあり、次の属性があります。 id、text、created_at、retweet_count、favorite_count、source、user_idデータフレームから特定の列を削除する方法

"RT"で始まるdf.text行を取り出して、新しいデータフレームを取得したいと考えています。

non_retweeted_list = [] 

for i in range(len(df)): 
    if (df.text[i][0] and df.text[i][1]) == ('R' and 'T'): 
     pass 
    else: 
     non_retweeted_list.append(df[i]) 

しかし、私はKeyError例外の下に取得する:

KeyError         
Traceback (most recent call last) 
/home/bd/anaconda3/lib/python3.5/site-packages/pandas/indexes 
/base.py in get_loc(self, key, method, tolerance) 
1944 try: 
-> 1945     return self._engine.get_loc(key) 
1946    except KeyError: 

. 
. 
. 
During handling of the above exception, another exception occurred: 
KeyError        Traceback (most recent call last) 
<ipython-input-3-5dfc6d77a22c> in <module>() 
    5   pass 
    6  else: 
----> 7   non_retweeted_list.append(df[i]) 
. 
. 
. 
KeyError: 0 

私はそれを解決することができますか?

+1

おそらくインデックスエラーです。データフレームの一部を共有します。また、 'type(df.index [0])'を実行するとどうなりますか? –

+1

また、 'df.text'を' df ['text'] 'に変更してください:https://stackoverflow.com/a/42978728/2539738 –

答えて

2

あなたはマスクにstartswithboolean indexingが必要になります。また

df = pd.DataFrame({'text':['RT apple','dog','RT baladiska']}) 
print (df) 
      text 
0  RT apple 
1   dog 
2 RT baladiska 

mask = df['text'].str.startswith('RT') 
print (mask) 
0  True 
1 False 
2  True 
Name: text, dtype: bool 

#filter out columns start with RT 
df1 = df[~mask] 
print (df1) 
    text 
1 dog 

#filter values starting RT 
df2 = df[mask] 
print (df2) 
      text 
0  RT apple 
2 RT baladiska 

mask = df['text'].str.contains('^RT') 
1

はあなたのインデックスを参照している方法かもしれません。 また、これは最初の2文字を確認する奇妙な方法です。どうしてそんなことをしていますか?私が下に示す方法についてどう思いますか?

non_retweeted_list = [] 
for i in range(len(df)): 
    if 'RT' == df['text'][df.index==i][0:2]: 
     pass 
    else: 
     non_retweeted_list.append(df[df.index[i]]) 

最後には、それはおそらくif-pass文を行うには良い考えではありません。代わりにネガを使用してください。

non_retweeted_list = [] 
for i in range(len(df)): 
    if 'RT' != df['text'][df.index==i][0:2]: 
     non_retweeted_list.append(df[df.index==i]) 
関連する問題