如何从数字列中提取数字的任何子集

时间:2018-11-26 08:16:00

标签: python numpy

我在数据框中有一个整数列(int64),其值为20170811。(yyyymmdd) 现在我只需要提取08并将其存储为新列。

df['key'].floordiv(10000) 

给我2017年。但是我想要08-如何获得它?

4 个答案:

答案 0 :(得分:0)

新答案(根据评论的要求)

如果要格式化日期时间字符串,则转换为Datetime有很多好处。为此,您可以使用DataFrame.dt.strftime。有关如何设置字符串格式和创建custmo格式的更多信息,请查看this

import pandas as pd

df = pd.DataFrame({'key': ['20181201', '20180302', '20180403']})

pd.to_datetime(df.key).dt.strftime('%b')

这将输出:

0    Dec
1    Mar
2    Apr
Name: key, dtype: object

旧答案

您可以做的是获取值的模块,将其除以100,然后减去小数点:

import pandas as pd

df = pd.DataFrame({'key': ['20181201', '20180302', '20180403']}).astype(int)

df['key'].map(lambda x: int((x % 10000) / 100))

哪个输出:

0    12
1     3
2     4
Name: key, dtype: int64

如果您有字符串,可以将其转换为Datetime对象,只需访问month

import pandas as pd

df = pd.DataFrame({'key': ['20181201', '20180302', '20180403']})

pd.to_datetime(df.key).map(lambda x: x.month)

为您提供相同的输出。


答案 1 :(得分:0)

或使用:

df['key']=df.astype(str)['key'].map(lambda x: x[4:6]).astype(int)

就像您对@Stefan所说的那样:

import calendar
df['key']=df.astype(str)['key'].map(lambda x: x[4:6]).astype(int).apply(lambda x: calendar.month_name[int(x)-1])

apply

df['key']=df.astype(str)['key'].apply(lambda x: x[4:6]).astype(int)

就像您对@Stefan所说的那样:

import calendar
df['key']=df.astype(str)['key'].apply(lambda x: x[4:6]).astype(int).apply(lambda x: calendar.month_name[int(x)-1])

答案 2 :(得分:0)

最可靠的方法可能是:

[ "$a" -eq "$b" ]
case $? in
    0) printf '%s\n' "true" ;;
    *) printf '%s\n' "false" ;;
esac

如果您希望import datetime import pandas as pd df = pd.DataFrame({'date': [20180201, 20180302, 20180403]}) df['month'] = pd.to_datetime(df['date'].astype(str), format='%Y%m%d').map(lambda x: x.strftime('%m')) 为整数,只需使用df['month']进行强制转换。

编辑: 如果要以4月,5月等格式表示月份,请使用col.astype(int)。您可能要看看strftime documentation

答案 3 :(得分:0)

您可以将系列转换为字符串,然后使用Pandas str方法进行切片:

df = pd.DataFrame({'date': [20180201, 20180302, 20180403]})

df['key'] = df['date'].astype(str).str[4:6]

print(df)

       date key
0  20180201  02
1  20180302  03
2  20180403  04

更好的选择是转换为datetime并将月份提取为整数:

df['key'] = pd.to_datetime(df['date'].astype(str)).dt.month

print(df)

       date  key
0  20180201    2
1  20180302    3
2  20180403    4