熊猫子字符串

时间:2019-09-09 03:59:34

标签: python regex python-3.x pandas numpy

如何使用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

我已经阅读了推荐的文档,但是找不到真正能起到作用的任何东西。任何帮助表示赞赏。

-戴夫

4 个答案:

答案 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]