도움을 구하는 초보자 프로그래머. 다음과 같은 Dataframe이 있습니다.
Current
0 "Invest in $APPL, $FB and $AMZN"
1 "Long $AAPL, Short $AMZN"
2 "$AAPL earnings announcement soon"
3 "$FB is releasing a new product. Will $FB's product be good?"
4 "$Fb doing good today"
5 "$AMZN high today. Will $amzn continue like this?"
또한 모든 해시 태그가있는 목록이 있습니다. cashtags = ["$AAPL", "$FB", $AMZN"]
기본적으로 DataFrame의이 열에있는 모든 행을 살펴보고 대문자 여부에 관계없이 고유 한 현금 태그로 행을 유지하고 다른 모든 행을 삭제하고 싶습니다. 원하는 출력 :
Desired
2 "$AAPL earnings announcement soon"
3 "$FB is releasing a new product. Will $FB's product be good?"
4 "$Fb doing good today"
5 "$AMZN high today. Will $amzn continue like this?"
기본적으로 단어가 문자열에 나타나는 횟수를 계산하고 해당 값을 새 열에 추가하여 숫자에 따라 행을 삭제할 수 있도록했습니다.
for i in range(0,len(df)-1):
print(i, end = "\r")
tweet = df["Current"][i]
count = 0
for word in cashtags:
count += str(tweet).count(word)
df["Word_count"][i] = count
그러나 이렇게하면 원하지 않는 행을 삭제합니다. 예를 들어, 고유 한 현금 태그가 여러 번 언급 된 행 ([3], [5])
원하는 결과를 얻으려면 어떻게해야합니까?
질문을 태그로 일반화하려는 경우 정규 표현식을 사용하는 것이 좋습니다. 당신에 대해 일치시킬 (\$w+)(?!.*/1)
참조 예를 들어, 여기 에 대한 자세한 설명은 있지만, 일반적인 구조는 다음과 같습니다
\$w+
: 달러 기호 다음에 하나 이상의 문자 / 숫자 (또는 _
)를 찾으십시오. 태그가 몇 개 있는지 세고 싶다면 이것 만 있으면됩니다.예 :
df.Current.str.count(r'\$\w+')
인쇄됩니다
0 3
1 2
2 1
3 2
4 1
5 2
그러나 이렇게하면 동일한 요소가 두 번 이상있는 경우가 제거되므로 일치하지 않음을 의미하는 부정적 미리보기를 추가해야합니다.
(?!.*/1)
: 부정적 미리보기입니다. 이는 나중에 동일한 일치가 뒤 따르면 일치 하지 않음을 의미 합니다. 이것은 문자열에서 마지막 태그 만 계산됨을 의미합니다.이 사용하면 다음 팬더 사용할 수있는 DataFrame.str
방법을 구체적으로 DataFrame.str.count
합니다 (이 re.I
사례를 구분 일치하지 않습니다)
import re
df[df.Current.str.count(r'(\$\w+)(?!.*\1)', re.I) == 1]
원하는 결과를 얻을 수 있습니다.
Current
2 $AAPL earnings announcement soon
3 $FB is releasing a new product. Will $FB's pro...
4 $Fb doing good today
5 $AMZN high today. Will $amzn continue like this?
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다