如何在sqlite python中提取字符串的数字部分

时间:2019-11-03 04:48:25

标签: python sqlite

我正在处理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中获得leap年吗?

2 个答案:

答案 0 :(得分:0)

使用正则表达式:

NavigationView {
  List {
  ...
  ...
  }.navigationBarTitle("New", displayMode: .inline)
  .navigationBarItems(trailing:
    HStack {
      Button(action: { self.onDismiss() }) {
        Text("Cancel")
      }
    }
  )
}

输出:

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))  

答案 1 :(得分:0)

如示例所示,如果非数字是罗马数字和数字组件左侧的空格,则可以使用SQLite的ltrim函数:

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

您可能要考虑一个更全面的字符列表,例如

"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_ "