查找包含特定值的字符串

时间:2019-04-30 11:34:03

标签: python string pandas

如何打印数据帧中的所有日期(解析为字符串),该日期在字符串中包含2012-06

我不记得哪个字符象征着“好吧,我是随机字符,这部分并不重要”

我以为是(.*),但不是

此操作的目的是查找并打开所有CSV文件。所以我想我最终可以避免这样的事情:2012-06(.*).csv打开2012年6月的所有文件并“执行操作”

import pandas as pd
from datetime import timedelta

datelist = pd.date_range(pd.datetime(year = 2012, month = 6, day = 15), pd.datetime.today()).tolist()
df = pd.DataFrame(datelist)

for date in df[0]:

  d = str(date)

  if d == "2012-06(.*)":  

    print(d)  

3 个答案:

答案 0 :(得分:4)

我建议使用Series.str.contains

df1 = df[df[0].astype(str).str.contains("2012-06")]

或用Series.str.startswith过滤熊猫:

df1 = df[df[0].astype(str).str.startswith("2012-06")]

print (df1)

            0
0  2012-06-15
1  2012-06-16
2  2012-06-17
3  2012-06-18
4  2012-06-19
5  2012-06-20
6  2012-06-21
7  2012-06-22
8  2012-06-23
9  2012-06-24
10 2012-06-25
11 2012-06-26
12 2012-06-27
13 2012-06-28
14 2012-06-29
15 2012-06-30

答案 1 :(得分:1)

您可以使用glob(https://docs.python.org/3/library/glob.html)来使用2012-06-*模式。

例如:

假设您将这些文件放在一个文件夹中:

ls -l files
total 0
-rw-r--r--  1 julien  staff  0 Apr 30 13:57 2012-06-01_test.csv
-rw-r--r--  1 julien  staff  0 Apr 30 13:58 2012-06-15_my_file.csv
-rw-r--r--  1 julien  staff  0 Apr 30 13:58 2013-01-10_my_file.csv

您可以这样做:

import glob

files = glob.glob('files/2012-06*.csv')
print(files)

它将打印:

['files/2012-06-15_my_file.csv', 'files/2012-06-01_test.csv']

使用此列表文件,您可以遍历并打开每个文件,例如

答案 2 :(得分:0)

您还可以通过yearmonth进行查询。

例如:

import pandas as pd

datelist = pd.date_range(pd.datetime(year = 2012, month = 6, day = 15), pd.datetime.today()).tolist()
df = pd.DataFrame(datelist)
print(df[(df[0].dt.year == 2012) & (df[0].dt.month == 6)])