我在数据框中有一个整数列(int64),其值为20170811。(yyyymmdd) 现在我只需要提取08并将其存储为新列。
df['key'].floordiv(10000)
给我2017年。但是我想要08-如何获得它?
答案 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