Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.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 pandas str.extract带有附加逻辑(lambda?)_Python_Pandas - Fatal编程技术网

Python pandas str.extract带有附加逻辑(lambda?)

Python pandas str.extract带有附加逻辑(lambda?),python,pandas,Python,Pandas,我在文本中有许多类型的日期: 2009年4月20日 04/20/09 2009年4月20日 4/3/09 04-20-2009 还有更多 我正在使用一个正则表达式(或几个正则表达式)来提取日期 Lucky pandas有一个非常有用的函数,名为extract,例如,它可以很好地提取我的大部分日期: df['text'].str.extract(r'(\d{1,2})[\/-](\d{1,2})[\/-](\d{1,4})', expand=True) 如上所示,我有3个捕获组。这将创建3列

我在文本中有许多类型的日期:

  • 2009年4月20日
  • 04/20/09
  • 2009年4月20日
  • 4/3/09
  • 04-20-2009
还有更多

我正在使用一个正则表达式(或几个正则表达式)来提取日期

Lucky pandas有一个非常有用的函数,名为extract,例如,它可以很好地提取我的大部分日期:

df['text'].str.extract(r'(\d{1,2})[\/-](\d{1,2})[\/-](\d{1,4})', expand=True)
如上所示,我有3个捕获组。这将创建3列:月、日、年

是否有可能在它们上运行lambda并创建一个列

与在“替换”中使用lambdas的方式相同


pandas.DatFrame.str.extract()的输出是一个数据帧。如果需要,您可以对其使用
pandas.DataFrame.apply()
,例如:

代码: 测试代码: 结果:
通过调整正则表达式以使用一个捕获组,可以避免单独列的问题。类似的内容适用于您提供的日期格式:

df.date.str.extract(r'([0-9]{1,2}[\/\.\-][0-9]{1,2}[\/\.\-][0-9]{1,4})', expand=False)
您可以进一步将结果转换为日期时间:

df['my_date_col'] = pd.to_datetime(df['my_date_col'])
为了证明<代码>pd.To_datetime
宽大:

import pandas as pd

lst = ['04/03/2009', '04/03/09', '4/03/09', '4/3/09', '04-03-2009',
       '4-3-09', '3 Apr 2009', '3rd April 2009', '3-Apr-09', '3-Apr-2009',
       '04/3/09', '04-3-09', '04-3-2009', '4-03-2009']

set(map(pd.to_datetime, lst))

# {Timestamp('2009-04-03 00:00:00')}

有一些库可以为您进行日期解析。不过,在合并它们之前,您可能需要做一些事情来处理年份。例如,如果你想让所有年份都是四位数。@Stephernauch谢谢,这只是一个例子,问题是在捕获组Does
pd上运行lambdas是否可能。to_datetime
这里不是为你做大部分工作吗?我支持@JonClements,至少有了上面的数据,熊猫日期时间能够以正确的格式转换所有日期。
              text
0      04/20/2009;
1        04/20/09;
2         4/20/09;
3           4/3/09
4      04-20-2009;

0    04/20/2009
1      04/20/09
2       4/20/09
3        4/3/09
4    04/20/2009
dtype: object
df.date.str.extract(r'([0-9]{1,2}[\/\.\-][0-9]{1,2}[\/\.\-][0-9]{1,4})', expand=False)
df['my_date_col'] = pd.to_datetime(df['my_date_col'])
import pandas as pd

lst = ['04/03/2009', '04/03/09', '4/03/09', '4/3/09', '04-03-2009',
       '4-3-09', '3 Apr 2009', '3rd April 2009', '3-Apr-09', '3-Apr-2009',
       '04/3/09', '04-3-09', '04-3-2009', '4-03-2009']

set(map(pd.to_datetime, lst))

# {Timestamp('2009-04-03 00:00:00')}