Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫试图找到一个解决方案,以更好地提取字符串与不同的模式_Python_Pandas - Fatal编程技术网

Python 熊猫试图找到一个解决方案,以更好地提取字符串与不同的模式

Python 熊猫试图找到一个解决方案,以更好地提取字符串与不同的模式,python,pandas,Python,Pandas,我有一个熊猫数据框,其中有一列如下所示: Period 0 summer 2020 1 winter 2021 2 day 3 March '20 4 June '21 5 12-13 April '20 6 summer 2021 7 12/03/20 base 8 week 8 '20 9 Weekend base 10 Monday base 11 BOM base 12 Year 2021 我想返回一个新列以派生一个新类别。因此,如果列Period包含字符串“summer”返回

我有一个熊猫数据框,其中有一列如下所示:

  Period 
0 summer 2020
1 winter 2021
2 day 
3 March '20
4 June '21
5 12-13 April '20
6 summer 2021
7 12/03/20 base
8 week 8 '20
9 Weekend base
10 Monday base
11 BOM base
12 Year 2021
我想返回一个新列以派生一个新类别。因此,如果列Period包含字符串“summer”返回“seasure”,或者如果字符串包含“March”,则返回“month”

但是,我有一个问题,一些字符串包含一个月名,前面有一个日期,例如20年4月12-14日。对于既有日期又有月份的,我想返回“周末”

我想要这个输出:

  Period          Time
0 summer 2020     season
1 winter 2021     season
2 day             day
3 March '20       month
4 Q1 '21          quarter
5 12-14 April '20 week/weekend
6 summer 2021     season
7 12/03/20 base   day
8 week 8 '20      week/weekend
9 Weekend base    week/weekend
10 Monday base      day
11 BOM base       day
12 Year 2021      year
在这里,我尝试使用“-”作为这类字符串的公共字符,但它没有解决问题,因为在上面的示例中,由于April的原因,它将返回“month”

df['Time'] =      pd.np.where(df.Period.str.contains("Summer"), "season",
                          pd.np.where(df.Period.str.contains("Winter"), "season",
                          pd.np.where(df.Period.str.contains("January"), "month",
                          pd.np.where(df.Period.str.contains("February"), "month",
                          pd.np.where(df.Period.str.contains("March"), "month", 
                          pd.np.where(df.Period.str.contains("April"), "month", 
                          pd.np.where(df.Period.str.contains("June"), "month", 
                          pd.np.where(df.Period.str.contains("July"), "month", 
                          pd.np.where(df.Period.str.contains("August"), "month",
                          pd.np.where(df.Period.str.contains("September"), "month",
                          pd.np.where(df.Period.str.contains("October"), "month",
                          pd.np.where(df.Period.str.contains("November"), "month", 
                          pd.np.where(df.Period.str.contains("December"), "month",
                          pd.np.where(df.Period.str.contains("Q"), "quarter",
                          pd.np.where(df.Period.str.contains("-"), "week/weekend",
                          pd.np.where(df.Period.str.contains("Week"), "week/weekend",
                          pd.np.where(df.Period.str.contains("Year"), "year", "day-ahead")))))))))))))))))

已编辑:向列句点(索引7-12)添加新字符串。并将“周末”类别更改为“周/周末”。如果不是季节、月份、季度、周/周末和年份,那么我希望在代码的最后返回“天”。

这与您的解决方案没有太大区别,但(希望)它更可读,更易于维护

将熊猫作为pd导入
将numpy作为np导入
季节=“|”。加入([“夏”、“秋”、“冬”、“春”])
月数=“|”。加入(['一月'、'二月'、'三月'、'四月',
“五月”、“六月”、“七月”、“八月”、“九月”,
“十月”、“十一月”、“十二月”])
quarters=“|”。.join([f“Q{i+1}”表示范围(4)中的i)
x=df[“期间”]
条件列表=[x.str.contains(季节),
x、 str.contains(月),
x、 街道(四分之一),
x、 str.contains(“-”),
x、 str.contains(“日”)]
选择列表=[“季节”,
“月”,
“季度”,
“周末”,
“天”]
df[“Time”]=np.select(条件列表、选项列表)

“|”。join(…)
的原因已给出

这与您的解决方案没有太大区别,但(希望)它更易于阅读和维护

将熊猫作为pd导入
将numpy作为np导入
季节=“|”。加入([“夏”、“秋”、“冬”、“春”])
月数=“|”。加入(['一月'、'二月'、'三月'、'四月',
“五月”、“六月”、“七月”、“八月”、“九月”,
“十月”、“十一月”、“十二月”])
quarters=“|”。.join([f“Q{i+1}”表示范围(4)中的i)
x=df[“期间”]
条件列表=[x.str.contains(季节),
x、 str.contains(月),
x、 街道(四分之一),
x、 str.contains(“-”),
x、 str.contains(“日”)]
选择列表=[“季节”,
“月”,
“季度”,
“周末”,
“天”]
df[“Time”]=np.select(条件列表、选项列表)

“|”。join(…)
的原因已给出

您可以使用映射字典来使用
pd.Series.str.extract()
标识所有匹配项:

收益率:

            Period     Time
0      summer 2020   season
1      winter 2021   season
2              day      day
3        March '20    month
4           Q1 '21  quarter
5  12-14 April '20  weekend
6      summer 2021   season

您可以使用映射字典来识别所有匹配项,方法是使用
pd.Series.str.extract()

收益率:

            Period     Time
0      summer 2020   season
1      winter 2021   season
2              day      day
3        March '20    month
4           Q1 '21  quarter
5  12-14 April '20  weekend
6      summer 2021   season

这不是我们应该采用的方式。如果你问了一个问题,两个人花时间为你提供一个有效的解决方案,你不能只是修改你的问题。事实上,为了实现你的目标,你可以修改其中一个答案。这不是应该的工作方式。如果你问了一个问题,两个人花时间为你提供一个有效的解决方案,你不能只是修改你的问题。实际上,为了实现目标,您可以修改其中一个答案。我使用编辑的问题修改了下面的一个答案。我使用编辑的问题修改了下面的一个答案。