Я пытаюсь выполнить проект по анализу данных. У меня есть датафрейм с тремя столбцами, как показано ниже: Дата, Пользователь, Твит. Дата — это временная метка твита, пользователь — это @handle того, кто написал твит, а твит — это текст твита.
Вот пример кадра:
import polars as pl
data = b"""
Date,User,Tweet
1.6781e6,user1,"$LQTY"
1.6781e6,user2,"$DF chart looks ready."
1.6781e6,user3,"Bought $LQTY."
1.6781e6,user4,"$PHB will easily reach 1.5$ as it did many times, the better your entry, the bigger the profits."
""".strip()
df = pl.read_csv(data)
shape: (4, 3)
┌──────────┬───────┬─────────────────────────────────┐
│ Date ┆ User ┆ Tweet │
│ --- ┆ --- ┆ --- │
│ f64 ┆ str ┆ str │
╞══════════╪═══════╪═════════════════════════════════╡
│ 1.6781e6 ┆ user1 ┆ $LQTY │
│ 1.6781e6 ┆ user2 ┆ $DF chart looks ready. │
│ 1.6781e6 ┆ user3 ┆ Bought $LQTY. │
│ 1.6781e6 ┆ user4 ┆ $PHB will easily reach 1.5$ as… │
└──────────┴───────┴─────────────────────────────────┘
Что я пытаюсь сделать
- Я хочу просмотреть весь столбец твитов, и если в твите есть тикер (например, $btc, $PHB), то добавить этот тикер в четвертый столбец под названием Тикеры.
df = df.with_columns(pl.col("Tweet").str.extract(r'\$.*').alias('Tickers'))
Я ожидал, что это регулярное выражение извлечет тикер и вставит его в четвертый столбец, но вместо этого результат получился следующим:
┌──────────┬───────┬─────────────────────────────────┬─────────┐
│ Date ┆ User ┆ Tweet ┆ Tickers │
│ --- ┆ --- ┆ --- ┆ --- │
│ f64 ┆ str ┆ str ┆ str │
╞══════════╪═══════╪═════════════════════════════════╪═════════╡
│ 1.6781e6 ┆ user1 ┆ $LQTY ┆ null │
│ 1.6781e6 ┆ user2 ┆ $DF chart looks ready. ┆ null │
│ 1.6781e6 ┆ user3 ┆ Bought $LQTY. ┆ null │
│ 1.6781e6 ┆ user4 ┆ $PHB will easily reach 1.5$ as… ┆ null │
└──────────┴───────┴─────────────────────────────────┴─────────┘
Очевидно, что в твите есть тикер, но он возвращает ноль.
Вот мой полный код, чтобы добраться до этого момента:
import polars as pl
df = pl.read_csv('shilling.csv')
df = df.select('Date', 'User', 'Tweet')
df = df.filter(pl.col("Tweet").map_elements(lambda x: any(w.startswith("$") for w in x.split())))
# convert Date column to datetime type
df = df.with_columns(pl.col('Date').str.to_datetime("%Y-%m-%d %H:%M:%S%z"))
# convert Date column to timestamp (int type)
df = df.with_columns(df['Date'].cast(int))
df = df.with_columns(df['Date'] / 1000000000)
df = df.with_columns(pl.col("Tweet").str.extract(r'\$.*').alias('Tickers'))
#df = df.with_columns(pl.col("Tweet").str.extract_regex(r'\$[A-Za-z0-9]+').alias('Tickers'))
print(df)
Подробнее здесь: https://stackoverflow.com/questions/756 ... ing-polars
Мобильная версия