Как извлечь числовую часть строки в Python sqlite - PullRequest
0 голосов
/ 03 ноября 2019

Я работаю над набором данных IMDB, и у меня есть записи моей таблицы фильмов следующим образом

import sqlite3
import pandas as pd
conn=sqlite3.connect('Db-IMDB.db')
result1=pd.read_sql_query('select year from Movie order by year',conn)
print(type(result1))
print(result1)

Я получаю вывод, как показано ниже

<class 'pandas.core.frame.DataFrame'>
           year
0          1931
1          1936
2          1936
3          1936
4          1939
...         ...
3470    IV 2011
3471    IV 2017
3472     V 2015
3473    VI 2015
3474  XVII 2016

[3475 rows x 1 columns]

Тип данныхстолбец года - это текст.

Так могу ли я узнать, как получить только числовую часть данных, чтобы я мог выполнять числовые операции, такие как%, чтобы я мог получать високосные годы в sqlite?

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

Если нецифровые числа представляют собой римские цифры и пробелы слева от числового компонента, как показано в примере, то вы можете использовать функцию ltrim SQLite:

sqlite> select ltrim("XVI   1955", "CDILMVX ");
1955

Возможно, вы захотитерассмотрим более полный список символов, которые нужно отбросить, например

"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_ "
0 голосов
/ 03 ноября 2019

Использовать регулярное выражение:

def findNum(x):
    return re.findall(r'[0-9]+',x)[0]


df = pd.DataFrame({
    'a':['IV 2014','2015','v 2016']
    })

#float just for typecasting so that use can do numeric operations
print(df['a'].apply(findNum).apply(float))  

Вывод:

0    2014
1    2015
2    2016
Name: a, dtype: float64
[Finished in 2.4s]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...