Вырезание данных из ячейки после чтения csv - PullRequest
0 голосов
/ 03 июня 2018

Я читаю данные из аналитики Twitter с помощью CSV и DataFrames.

Я хочу извлечь URL-адрес из определенной ячейки

Вывод этого процесса следующий

tweet number tweet id               tweet link              tweet text
1            1.0086341313026E+018   "tweet link goes here"  tweet text goes here https://example.com"

Как я могу нарезать этот "твиттекст ", чтобы получить URL этого?Я не могу нарезать его, используя [-1: -12], потому что есть много твитов с различным количеством символов.

Ответы [ 3 ]

0 голосов
/ 03 июня 2018

Вот альтернатива, которая будет работать, если длина имени домена является переменной, а не всегда длиной 11 символов:

In [2]: df['tweet text'].str.split('//').str[-1]

Out[2]:
1    example.com
Name: tweet text, dtype: object
0 голосов
/ 03 июня 2018

Вот один из способов, который использует список строк и pd.Series.apply для поиска действительного URL:

s = pd.Series(['tweet text goes here https://example.com',
               'some http://other.com example',
               'www.thirdexample.com is here'])

test_strings = ['http', 'www']

def url_finder(x):
    return next(i for i in x.split() if any(t in i for t in test_strings))

res = s.apply(url_finder)

print(res)

0     https://example.com
1        http://other.com
2    www.thirdexample.com
dtype: object
0 голосов
/ 03 июня 2018

Я считаю, что вы хотите:

print (df['tweet text'].str[-12:-1])
0    example.com
Name: tweet text, dtype: object

Более общее решение с регулярное выражение с str.findall для списка всех ссылок и при необходимости выберите сначалапутем индексации с помощью str[0]:

pat = r'(?:http|ftp|https)://(?:[\w_-]+(?:(?:\.[\w_-]+)+))(?:[\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?'

print (df['tweet text'].str.findall(pat).str[0])
0    https://example.com
Name: tweet text, dtype: object
...