如何使用loc或iloc从列中的字符串中提取第5和第6个字符并创建新列?
我的数据框:
打印(df):
index effective date
0 2019-12
2 2019-13
15 2019-10
20 2019-09
23 2018-26
以下方法有效,但是它给了我切片消息的副本:
df['pp'] = df['effective date'].str[5:7]
试图在DataFrame的切片副本上设置一个值。 尝试改用.loc [row_indexer,col_indexer] =值
请参阅文档中的警告:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
预期结果是这样,没有警告:
打印(df):
index effective date pp
0 2019-12 12
2 2019-13 13
15 2019-10 10
20 2019-09 09
23 2018-26 26
我已经阅读了推荐的文档,但是找不到真正能起到作用的任何东西。任何帮助表示赞赏。
-戴夫
答案 0 :(得分:2)
看起来您只需要str.split("-")
例如:
df = pd.DataFrame({"effective date": ["2019-12", "2019-13", "2019-10", "2019-09", "2018-26"]})
df['pp'] = df['effective date'].str.split("-").str[1]
print(df)
或
df['pp'] = pd.to_datetime(df['effective date'], format="%Y-%d").dt.day
输出:
effective date pp
0 2019-12 12
1 2019-13 13
2 2019-10 10
3 2019-09 09
4 2018-26 26
答案 1 :(得分:1)
也许尝试使用切片功能?
df['pp'] = df['effective date'].str.slice(5,7)
此外,我尝试了您的方法,但未收到警告。
答案 2 :(得分:0)
在使用df ['pp'] = df ['有效日期'] .str [5:7]时,我没有得到任何警告,可能是您需要更新python版本。 使用datetime包,您可以将新列创建为日期
df ['生效日期'] = pd.to_datetime(df。生效日期,格式='%Y-%d') 对于(df)中的我:
i['day']= i.effective date.dt.day
i['year']=i.effective date.dt.hour
df.head()
这应该是冗长的过程,但是当我们处理日期值时,它将给出准确的结果
答案 3 :(得分:0)
如果要在'-'之后获取部分数据,最好使用分割功能
df['pp'] = df['effective date'].str.split('-').str[1]
对于“-”之前的数据
df['pp'] = df['effective date'].str.split('-').str[0]